.[ ČeskéHry.cz ].
Archív :: ZIP
Jdi na stránku Předchozí  1, 2, 3, 4, 5
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 2. květen 2011, 12:44:12    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 2. květen 2011, 12:59:43    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 2. květen 2011, 15:20:47    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 2. květen 2011, 16:32:18    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 2. květen 2011, 16:44:11    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 17. květen 2011, 09:53:11    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 17. květen 2011, 12:56:50    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 17. květen 2011, 13:58:20    Předmět: Odpovědět s citátem

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 Laughing

Mas pravdu, tezko radit, kdyz nezname data. Je textova forma uplne vhodna?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 17. květen 2011, 14:10:35    Předmět: Odpovědět s citátem

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... Very Happy 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 17. květen 2011, 15:20:33    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4, 5
Strana 5 z 5

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna