Portál AbcLinuxu, 30. dubna 2025 23:34

Dopište mi fci

4.7.2006 21:41 | Přečteno: 1637× | unknown_category

Tak už mi to leze na nervy. Nějak nemůžu setřídit ty položky. Mám strukturu:
typedef struct FilesPanelEntry{
	Glib::ustring name;
	Glib::ustring ext;
	Glib::ustring size;
	Glib::ustring date;
	Glib::ustring rwx;
	Glib::ustring owner;
	Glib::ustring group;
};
Pak mám objekt s TreeViewem. Objekt má kromě jiných i tyto metody metody:
virtual void addEntry( const FilesPanelEntry& entry );
virtual void clear();
virtual off64_t count();
virtual bool getEntry( off64_t n, FilesPanelEntry& entry );
virtual bool setEntry( off64_t n, FilesPanelEntry& entry );
Metody získávají/nastavují jednotlivé položky TreeViewu. Ve FilesPanelEntry::size můžou být tyto hodnoty:
<DIR> = adresář
<BLKD> = blokové zařízení
<CHRD> = znakové zařízení
<FIFO> = fifo
Velikost = soubor
Protože mi to už nemyslí, potřebuju si dát pauzu. Jenže zas nechci zbytečně ztrácet čas, a proto bych od někoho potřeboval dopsat fci na seřazení těch souborů. První by měly být adresáře seřazené dle abecedy, poté soubory dle abecedy, poté bloková zařízení, znaková zařízení a nakonec FIFO. Potřeboval bych to doplnit sem:
void JXPCommander::sortFiles( bool left )
{
	FilesPanel *fp = (left ? &filesPanelLeft : &filesPanelRight);
	bool orderChanged = true;
	FilesPanelEntry e1,e2;
	while(orderChanged){
		orderChanged = false;
		for( off64_t i = 0; i < fp->count()-1; ++i  )
		{
			fp->getEntry( i, e1 );
			fp->getEntry( i+1, e2 );
			/*
			 * Tu proveďte nějaké ty porovnání, v případě
			 * že mají být položky prohozeno tak proveďte:
			 *
			 * fp->setEntry( i,e2 );
			 * fp->setEntry( i+1,e1 );
			 *
			 * a nezapomeňte nastavit orderChanged na true.
			 *
			 * Stringy se nebojte porovnávat znaménky < a >
			 * o utf8 se již stará sama třída Glib::ustring
			 */
		}
	}
}
       

Hodnocení: 22 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

4.7.2006 21:53 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Dopište mi fci
Odpovědět | Sbalit | Link | Blokovat | Admin
sice tam ještě nemáme to prohazování, ale skoro bych si tipnul, že tímhle způsobem vznikne leda tak bubblesort se složitostí O(n^2) a to ještě dost naivně implementovanej (ta horní mez "fp->count()-1" by se mohla snižovat - např. po prvním průběhu toho vnitřního cyklu budeme mít na začátku nebo na konci maximum nebo minimum :-))

jinak je to zajímavý nápad, jak něco programovat

jo a tohle :
void JXPCommander::sortFiles( bool left )
{
FilesPanel *fp = (left ? &filesPanelLeft : &filesPanelRight);
bych neudělal snad ani já, trochu více obecnosti bych do toho vrazil :-D
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
4.7.2006 21:59 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Dopište mi fci
a taky je mírně úchylný mít to všechno v řetězcích...
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
4.7.2006 22:08 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Dopište mi fci
Proč nepoužít třeba qsort z glibc? Nebo v C++ není nějaká obdoba toho? A proč třeba nepracuje celou dobu nad modelem pro ten TreeView?
Copak toho není dost?
4.7.2006 22:18 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: Dopište mi fci
Odpovědět | Sbalit | Link | Blokovat | Admin
Když je řeč o JXP Commanderu, kde jsou nebo budou jeho zdrojové kódy. Na předcházejícím zápisku v blogu jsem viděl už i screenshot. Docela rád bych se na testování podílel už od začátku :-) a na wiki ještě jsem žádný odkaz na zdrojáky nenašel.
4.7.2006 22:18 machr | skóre: 2 | blog: machr
Rozbalit Rozbalit vše Re: Dopište mi fci
Odpovědět | Sbalit | Link | Blokovat | Admin
void JXPCommander::sortFiles( bool left )
{
	FilesPanel *fp = (left ? &filesPanelLeft : &filesPanelRight);
	bool orderChanged = true;
	FilesPanelEntry e1,e2;
	int max = fp->count()-1;
	while(orderChanged){
		orderChanged = false;
		for( off64_t i = 0; i < max; ++i  )
		{
			fp->getEntry( i, e1 );
			fp->getEntry( i+1, e2 );

			if(e1.name > e2.name) { // pro razeni vzestupne podle jmena
				fp->setEntry(i, e2);
				fp->setEntry(i+1, e1);
				orderChanged = true;
			}
		}
		max--;
	}
}
- ale doporucoval bych trochu zagooglovat a nastudovat quick-sort...
(__) (oo) /-------\/ / | || * ||----|| ~~ ~~
4.7.2006 22:22 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: Dopište mi fci
Tak qiucksort a jiné algoritmy jsou popsány v češtině třeba v těchto skriptech.
4.7.2006 22:28 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Dopište mi fci
quicksort vůbec znát nepotřebuje natož ho snad implementovat, stačí, když bude vědět, kdy a jak ho má použít :-)

nebo to skončí tak, že uspořádaj irc chat o tom, jakým způsobem budou vybírat "medián"
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
4.7.2006 22:47 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Dopište mi fci
tak už jsem si našel, že se tomu říká pivot
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
4.7.2006 22:22 Creckx | skóre: 23 | blog: cxblog | Lanškroun
Rozbalit Rozbalit vše Re: Dopište mi fci
Odpovědět | Sbalit | Link | Blokovat | Admin
C++ má takovou vychytávku v STL a tou jsou šablony. Jedna z nich se jmenuje vector. Používal jsem to na uskladňování dat. Třídit položky můžeš svou vlastní porovnávací fcí. STL je fajn knihovna tak na to jukni (+ články okolo toho).
Můj blog Pokud máte taky blog, můžeme vyměnit odkazy :)
Luk avatar 4.7.2006 22:52 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Dopište mi fci
V STL je toho zajímavého mnohem víc. Nejen vector, ale také deque a list, když už jsme u kontejnerů tohoto typu. Nelze samozřejmě také opomenout set, multiset, map a multimap (a další více či méně užitečné věci). Kdo se toho dobrovolně vzdává, o hodně přichází.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
4.7.2006 23:00 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Dopište mi fci
On už z GTK používá ListStore, tam toho zase moc není, ale může si napsat vlastní model úplně sám (třeba založený na něčem z STL), nebo ho může založit na tomto. Nevím proč to nedělá.
Copak toho není dost?
4.7.2006 23:53 Creckx | skóre: 23 | blog: cxblog | Lanškroun
Rozbalit Rozbalit vše Re: Dopište mi fci
Já jsem to nikdy moc nezkoumal. Jednou mě k tomu navedl brácha.
Můj blog Pokud máte taky blog, můžeme vyměnit odkazy :)
4.7.2006 23:07 lefti | skóre: 18 | blog: OneAndOnlyTrueBlog
Rozbalit Rozbalit vše Re: Dopište mi fci
Odpovědět | Sbalit | Link | Blokovat | Admin
ty ses jxp? ;)
lankvil avatar 5.7.2006 01:33 lankvil | skóre: 8 | Praha
Rozbalit Rozbalit vše Re: Dopište mi fci
Odpovědět | Sbalit | Link | Blokovat | Admin
No jesi tomu rozumim spravne, tak chces seradit polozky v Gtk::ListStore, jesi ne tak me ignorujte. Na to trideni staci napsat porovnavaci funkci a pak ji predat jako parametr funkci set_default_sort_func (viz objekt Gtk::TreeSortable). Mozna bude potreba jeste neco, uz sem to dlouho nedelal. kdyztak to bude urcite popsany v dokumentaci.
Já mám taky blog
5.7.2006 12:58 unknown_user | skóre: 8 | blog: unknown_blog | Kamenný Újezdec
Rozbalit Rozbalit vše Re: Dopište mi fci
Už to třídí :) Díky.
Tento příspěvek je šířen pod licencí GNU/FDL.
5.7.2006 13:54 XMurder | skóre: 25 | blog: introvert
Rozbalit Rozbalit vše Re: Dopište mi fci
může se hodit: http://www.linuxsoft.cz/script_list.php?id_kategory=153
mkoubik avatar 5.7.2006 14:16 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: Dopište mi fci
Odpovědět | Sbalit | Link | Blokovat | Admin
A můžeš prosím někam hodit zdrojáky? Já už jsem totiž taky něco napsal a nerad bych dělal fork. Možná by neškodilo založit projekt na SourceForge.
Plesk! | Population | Industry
5.7.2006 18:22 XMurder | skóre: 25 | blog: introvert
Rozbalit Rozbalit vše Re: Dopište mi fci
Nějak se mu nechce

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.