Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
sulthan

Založen: 24. 10. 2007 Příspěvky: 104
|
Zaslal: 2. květen 2011, 12:44:12 Předmět: |
|
|
ZIP soubory trosku znam. Podle me to opravdu neni dobra varianta pro ukladani dat pro hru.
ZIP soubor ma totiz za ucel dve veci:
1/ kompresi (pomoci inflate-deflate algoritmu)
2/ archivaci - tj. ulozeni nekolika az mnoha souboru do jednoho souboru + pripadne sifrovani
Ty v podstate potrebujes jenom tu kompresi. Co se stane pokud budes chtit otevrit komprimovany soubor ze ZIPu? Nejdrive se seekuje na konec zipu, kde je tabulka s nazvy souboru a offsety, ta se precte, najde se spravna polozka, pak se seekuje zpatky na dany offset a tam se zacne dekomprimovat. To znamena, ze se tam dela pomerne dost akci navic, ktere nejsou potreba a zbytecne zpomaluji nacitani. Kdyz uz kompresi, proc nenechat soubory nezavisle a jen je zkomprimovat?
Pokud to chces opravdu narvat do jednoho souboru, tak bych doporucil nadefinovat si vlastni format - na zacatku tabulku s offsety (kterou si prectes na zacatku a budes si ji drzet v pameti) a pak jen zkompirovana data jdouci po sobe. Bude to pro tebe mnohem transparentejsi. |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 2. květen 2011, 12:59:43 Předmět: |
|
|
Tu tabulku souborů si může držet v paměti, ať už je uložená jakkoli neefektivně, takže může zůstat u ZIPu. _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
sulthan

Založen: 24. 10. 2007 Příspěvky: 104
|
Zaslal: 2. květen 2011, 15:20:47 Předmět: |
|
|
Ladis napsal: |
Tu tabulku souborů si může držet v paměti, ať už je uložená jakkoli neefektivně, takže může zůstat u ZIPu. |
To neni pravda, protoze spousta zip api pracuje bezestavove, tj. tu tabulku si nepamatuje, ale nacita ji znova pri kazdem dotazu. A seek na konec souboru neni zas tak levna zalezitost. Vetsina knihoven je navic jen read-only.
Pokud si to chce napsat sam, tak proc se namahat studovanim specifikace zip souboru (ktera obsahuje spoooustu veci, ktere nemuze potrebovat), kdyz to muze rychleji a snadneji implementovat jinak?
Predpokladame, doufam, ze se to dela jako zaverecna optimalizace a tedy s obsahem toho zipu nebude muset pracovat jinak nez z aplikace. |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 2. květen 2011, 16:32:18 Předmět: |
|
|
Reaguji k prvnímu Sulthanově příspěvku, chtěl jsem ZIP, 7Z nebo cokoliv, na co existuje program, který za mě dělá tu archivaci, abych si to nemusel programovat. Chtěl jsem se zabývat pouze čtením z archívu...
Neexistuje náhodou zdrojový kód k funkci fscanf (resp. scanf)? Jsem trochu googlil, ale asi špatně... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 2. květen 2011, 16:44:11 Předmět: |
|
|
no aj ked ho najdes tak ti bude na dve veci. (mozes si staihnut zdrojaky libc) ale ono to bude iba wraper na systemove volania samotneho jadra. takze jedina moznost je opatchovat si napriklad libc ktoru pouziva gcc a potom by mohol fopen otvarat aj zip subory. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 17. květen 2011, 09:53:11 Předmět: |
|
|
Tak nakonec jsem se rozhodl, že to udělám tak jak jste mi radili. Zatím tedy z toho můžu číst metodou totožnou s fread a interně se jen použije správná funkce podle toho, jestli je to fyzický soubor nebo soubor v ZIPu.
Teď bych jen potřeboval prokonzultovat, jakým způsobem z toho číst data textově.
Zatím jsem přemýšlel o tom, že jako hlavní věc by bylo čtení po řádcích, které bych si pomocí sscanf už rozparsoval na to, na co potřebuji...popř. bych měl metody jako např. readString, který načte řetězec, oddělený bílými znaky, což je logické...
Tak se vás chci zeptat, jak by jste to dělali vy?
Děkuji. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 17. květen 2011, 12:56:50 Předmět: |
|
|
Jak bych to dělal, nevím, ale dalo by se to udělat pomocí konečného nebo nějakého vyššího automatu, popřípadě jejich kombinací. To už by záleželo na syntaxi a sémantice těch textových dat. Každopádně bys pak nemusel číst po řádcích, stačilo by ti čtení po znacích, tedy vlastně zase funkce fread.
Záleží na tom, jak to chceš mít robustní. Pokud máš na každém řádku tři floaty oddělené mezerou, tak by asi stačil pevný buffer na řádky (načtené po znacích, zbytek řádku by se např. ignoroval, což by ti nevadilo, protože víš, že si data vytváříš sám a že delší řádek než např. 512 znaků tam nebude) a sscanf. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
sulthan

Založen: 24. 10. 2007 Příspěvky: 104
|
Zaslal: 17. květen 2011, 13:58:20 Předmět: |
|
|
frca napsal: |
Jak bych to dělal, nevím, ale dalo by se to udělat pomocí konečného nebo nějakého vyššího automatu, popřípadě jejich kombinací. |
A ja bych na to napsal, nevim, treba nejaky program
Mas pravdu, tezko radit, kdyz nezname data. Je textova forma uplne vhodna? |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 17. květen 2011, 14:10:35 Předmět: |
|
|
Potřeboval bych pokrýt většinu funkcionality fscanf, ale co jsem koukal na nějaké implementace z glibc, tak to je strašně dlouhý a kopírovat se mi to nechce...
Vzhledem k tomu, že moje textová data, jsou ukládaná po řádcích, tak asi začnu čtením po řádcích... A parsovat to budu, jak už jsem psal, přes sscanf, no a časem tam můžu přidělat něco inteligentnějšího, co nebude závislé na řádcích... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 17. květen 2011, 15:20:33 Předmět: |
|
|
na parsovanie cisel a textu mozes pouzit flex. ten ti rozseka vstupny text podla tebou zadanych regularnych vyrazov. flex dokaze citat aj z char*. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
|