Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Čtení unixových souborů
serial
23. ledna 2002, 00.00 | S rozmachem Linuxu a novou podporou Delphi resp. Kylixu v Linuxu se nám čím dál tím více začínají objevovat textové soubory s unixovým řádkováním. Pojďme se tedy podívat se dají v Delphi číst...
Již jste se pravděpodobně setkali s textovými soubory ve formátu Unixu. Ze začátku, když se začaly objevovat s nimi bylo dost problémů, protože velmi málo editorů s nimi umělo pracovat správně. Dnes je však zcela jiná doba. A proto si ukažme, jak rozšířit i vlastní programy, aby se už ani ony nenechali zaskočit o trochu odlišným formátováním / zalomením řádek.
Zcela zde budu ignorovat kódování souborů, osobně si myslím, že je to zcela jiná kapitola.
Unixové soubory se mnohem více začali objevovat i v systémech Microsoft® s postupným rozšiřováním Javy. V současné době pro nás, to bude fakt, že Delphi se posunuly i na platformu Linuxu. A dodám-li, že Kylix se stal nejoblíbenějším vývojovým prostředkem pro Linux v minulém roce a neustálým růstem počtu uživatelů Linuxu, pak si každý, dříve či později, se setká s nutností umět správně číst unixový soubor.
Neřeknu nic nového, když řeknu, že pod Microsoft® Windows® se řádky v textových souborech oddělují CR LF (Carriage Return, Line Feed), neboli systémová 13 a 10. Zatímco v systémech vzniklých z Unixu se řádky oddělují jen LF, systémová 10. Díky tomu u FTP, kde se tato záměna prováděla automaticky, musela vzniknout korekce pro datové soubory v podobě příkazu binary.
Co se týče standardního přístupu v Delphi takovýmto textovým souborům, tak zatím jen verze 6 se s nimi umí vypořádat přímo přes readln. Což ovšem znamená, že uživatelé nižších verzí, než je Delphi 6, se s tím musí vypořádat sami. A právě pro ně je tento článek.
Základní způsob, který přímo využívá funkci readln, jste asi používali pro textové soubory doposud. Proto se nejdříve podíváme, jak ho elegantně upravit s co nejméně změnami.
|
V podstatě zde není nic jiného než přidaný repeat, který načtený řetezec rozděluje na pravé řádky. Je si ale nutno uvědomit to, že při volání readln se načte do definované proměnné celý obsah souboru! V souboru, se totiž nikde nevyskytuje CR LF. Takže načtení může být u rozsáhlých souborů mnohem pomalejší. Celý postup má tu výhodu, že algoritmus, který je uvnitř nepozná, zda-li právě čte klasický textový soubor či textový soubor z Unixu.
Jiným způsobem, který je mimochodem asi mnohem efektivnější a dalo by se říci i jednodušším na implementaci, je definovat si vlastní AssignFile v našem případě AssignStreamFile. Kód není pro laika zcela jednoduchý, už jen proto, že se zde používají streamy. Hlubší prostudování nechám na vás. Jen bych upozornil na část, kde se definuje funkce StreamFileInOut a do ni je krásně vloženo několik procedur. Tento postup není v Delphi, až tak moc rozšířený. Ale o to je v některých situacích účinnější.
Jen bych rád dodal, že s tímto kód již nebudete muset ve svém programu upravovat. Takže ho může používat i úplný začátečník, který nemá ani potuchy, co se to tam vlastně děje.
|
Pro jednoduchost v programu stačí zavolat AssignStreamFile místo AssignFile. Takto otevřený soubor opět nerozlišuje, čte-li se normální windowsový či unixový soubor.
Celý tento postup má tu výhodu, že ve zdrojovém kódu, stačí jen nahradit ono AssignFile za AssignStreamFile. A dále vložit do uses StreamFile. A nic víc. Jednoduchý program by mohl vypadat takto:
|
A to je pro dnešek vše. Děkuji vám za pozornost. A pokud máte zájem o zdrojové kódy zde uváděné, pak sáhněte po tomto souboru unixfile.zip (2 kB).
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007