Soubory, složky… a nyní i rukojeti souborů!

Automaticky přeloženo z Deepl

Příkazy Soubor a Složka, které se objevily ve verzi 4D v17 R5, umožňují spravovat složky a soubory na disku moderním a efektivním způsobem.

Pokud jde o zápis a čtení, máte k dispozici funkce setText a getText pro čtení nebo zápis celého obsahu. Co ale dělat, když chcete přečíst nebo přidat jeden či více řádků do existujícího dokumentu? To lze provést snadněji než kdy dříve pomocí nových objektů „file handles“, které se objevily v 4D v19 R7.

Čtěte dále a dozvíte se podrobnosti!

HDI Použití úchytů souborů

Co jsou to rukojeti souborů?

Souborové rukojeti jsou objekty vytvořené na základě objektů „Soubor“ a mají funkce pro přístup k libovolné části dokumentů a odtud pro postupné čtení nebo zápis jejich obsahu.

I když v obecném případě čteme od začátku do konce, je možné přesně definovat polohu „čtecí hlavy“.

Stejně tak když chceme otevřít dokument a zapsat do něj novou informaci, je to zpravidla na konci dokumentu, do kterého chceme zapisovat. „Zapisovací hlavu“ můžete umístit kamkoli chcete.

Ale to není všechno!

Hlavní a nejvýznamnější vlastností obsluhy souborů je to, že se vyhnete otevírání a zavírání dokumentů, což je časově velmi náročná operace. A nejlepší myšlenka je, že zavírání souboru programováním již není povinné. Jakmile se na zpracovávaný soubor nikde ve vašem kódu neodkazuje, soubor se automaticky uzavře! To je důvod, proč, jak uvidíme později, není potřeba žádná funkce .close()!

Ponořme se do rychlé ukázky

Cílem je přidat řádky do souboru protokolu. Vytvoříme třídu Logger a funkci writeLine a podíváme se, jak ji zavolat !

Class constructor($logName : Text)
	
	var $file : 4D.File
	
	$file:=File("/LOGS/"+$logName)
	$file.parent.create()  // check that parent folder exists; Otherwise it will be created.
	This.fh:=$file.open("append")
	
Function writeLine($logText : Text)
	
	This.fh.writeLine($logText)

Jakmile je tato třída vytvořena, zavolejme ji !

var $logger : cs.Logger
var $logName : Text

$logName:=Replace string(Timestamp; ":"; "-")+".txt"
$logger:=cs.Logger.new($logName)

For ($i; 1; 10)
	$logger.writeLine("test_"+String(Random))
End for 

V tomto okamžiku bychom mohli soubor uzavřít nastavením objektu $logger na hodnotu NULL, ale není to povinné ! Na konci tohoto kódu bude objekt $logger (a jeho atribut .fh) NULL, takže soubor bude uzavřen!

Atributy a funkce

Nový soubor Funkce:

První funkce, open(), je nová funkce File umožňující vytvořit handle. Handle lze vytvořit v režimu čtení, zápisu nebo připojování.

$handle:=$file.open("write")

Pokud potřebujete určit znakovou sadu, oddělovače pro čtení nebo zápis, můžete jako parametr použít také objekt .

$o:=New object()
$o.mode:="append"
$o.charset:="UTF-8"
$o.breakModeRead:=Document with CRLF
$o.breakModeWrite:=Document with CRLF
$handle:=$file.open($o)

Po vytvoření handle budou k dispozici další atributy a funkce:

Další dva užitečné atributy handle

  • .offset je aktuální offset datového toku (pozice uvnitř dokumentu)
    • Tento atribut je zapisovatelný. Použijte jej pouze v případě, že potřebujete nastavit pozici pro čtení nebo zápis na určitém místě. Jen nezapomeňte, že jeho hodnoty se po operaci čtení nebo zápisu automaticky změní.
  • .eof je false, dokud není dosaženo konce dokumentu.

 

Atribut .eof umožňuje procházet soubor velmi elegantním způsobem

$fileHandle:=$file.open("read")  
While (Not($fileHandle.eof))  // eof = end of file
	$text:=$fileHandle.readLine() 
	//…	
End while 

handle Funkce

Třída handle obsahuje mnoho funkcí, které umožňují:

  • Číst a zapisovat text
  • Číst a zapisovat řádky (s automatickou správou zalomení řádků)
  • Získat a nastavit velikost dokumentu
  • Číst a zapisovat bloky!

Kam dál?

Další podrobnosti najdete v centru dokumentace. A neváhejte se na nás obrátit na fóru 4D; rádi vám pomůžeme.

Roland Lannuzel
- Product Owner & 4D Expert - Po studiu elektroniky se Roland věnoval průmyslovým IT jako vývojář a konzultant, který vytvářel řešení pro zákazníky s různými databázemi a technologiemi. Koncem 80. let se zamiloval do 4D a používal jej při psaní podnikových aplikací, které zahrnovaly účetní, fakturační a e-mailové systémy. nakonec se připojil ke společnosti v roce 1997 a Rolandův cenný přínos zahrnuje návrh specifikací, testovacích nástrojů, demoverzí a také školení a přednášky pro komunitu 4D na mnoha konferencích. Nadále aktivně utváří budoucnost 4D definováním nových funkcí a nástrojů pro vývoj databází.