Zápis do textového souboru delphi. Vytváření a práce s textovými soubory v Delphi

Soubor je pojmenovaná datová struktura, která je posloupností datových prvků stejného typu umístěných na disku nebo jakémkoli jiném externím úložném zařízení.

Existuje koncept aktuální pozice pro soubor. Zobrazuje číslo prvku, který bude přečten nebo zapsán při příštím přístupu k souboru. Čtení a zápis každého prvku posune aktuální pozici o jeden dopředu. U většiny souborů můžete změnit aktuální pozici čtení a zápisu přímým přístupem k jeho prvkům.

V závislosti na typu prvků existují tři typy souborů:

– soubor prvků určitého typu (typizované soubory);

– soubor prvků, jejichž typ není specifikován (netypovaný soubor);

– textový soubor, tzn. prvky jsou textové řetězce.

Pro práci se souborem v programu je v sekci popisu proměnné deklarována souborová proměnná (logický soubor):

název souboru:souborof file_item_type;

Soubor, jehož komponenty jsou znaková data, se nazývá znak nebo text:

název souboru:TextFile;

Po deklaraci proměnné souboru, která určuje typ součástí souboru, musíte zadat konkrétní soubor, tzn. přidružit proměnnou souboru k fyzickému souboru. Chcete-li to provést, použijte postup:

AssignFile(varf, název souboru:Řetězec);

Funkce a postupy pro práci se soubory:

1. Otevření souboru pro zápis

– přepsání (přepsání nového souboru přes existující nebo vytvoření nového souboru) – použije se postup

přepsat(proměnná_souboru)

– přidání na konec souboru – použije se postup

připojit(proměnná_souboru)

1. Zapsat do souboru

Napsat

Writeln(proměnná_souboru, seznam_proměnných)

Rozdíl mezi instrukcemi je ten, že instrukce writeln po vytištění všech hodnot zapíše do souboru znak nového řádku.

2. Zavírání souboru. Před vypnutím musí být všechny otevřené soubory uzavřeny pomocí tohoto postupu

CloseFile(proměnná_souboru)

3. Otevření souboru pro čtení. Použitý postup Resetovat (proměnná_souboru)

4. Čtení dat ze souboru

číst(proměnná_souboru, seznam_proměnných)

readln(proměnná_souboru, seznam_proměnných)

Rozdíl mezi těmito procedurami je ten, že při volání příkazu readln se ukazatel čtení ze souboru automaticky přesune na začátek dalšího řádku souboru.

5. Určení konce souboru. Použitá funkce EOF(proměnná_souboru). Hodnota funkce je nepravdivá, pokud přečtený datový prvek není poslední v souboru, tzn. Další čtení je možné. Pokud je přečtený prvek souboru poslední, pak má EOF hodnotu true.

I když ne eof(f) do begin … end;

6. Přejmenovat(var F; NewName: string)– přejmenuje neotevřený soubor F libovolného typu. Nový název je uveden v NewName.

7. Hledat( var F; NumRec: Longint)– nastaví pozici čtení a zápisu prvku s číslem NumRec; F – zadaný nebo nezadaný soubor.

8. IORsult:Inte G er – vrací kód charakterizující výsledek (zda došlo k chybě či nikoli) poslední I/O operace.

9. FilePos(var F): Longint– vrací aktuální pozici souboru pro soubor F (číslo prvku, do kterého je nainstalován, počítáno od nuly). Nepoužívá se s textovými soubory.

10. Velikost souboru(var F): Longint– vrací počet komponent v souboru F. Nepoužívá se u textových souborů.

Pro práci se soubory můžete použít následující vizuální komponenty:

– (SITELINK-S102)OpenDialog(/SITELINK);

– (SITELINK-S103)SaveDialog(/SITELINK) atd., které se nacházejí na kartě Dialogy.


1) Nasměrujte výstup vašeho programu do souboru.
2) Nasměrujte výstupní proud vašeho programu na tiskárnu.
3) Čtení ze vstupního souboru.

Přesměrování výstupu vašeho programu do souboru

Často moji profesoři, aby se ujistili o mé poctivosti a věřili, že jsem program vytvořil já, požadují jeho úplný výpis nebo zmínku o mně jako o jednom z autorů. Dále chtějí, aby všechna data vygenerovaná programem byla vydána do souboru. Ale jak to udělat v Delphi nebo v jednoduchém Pascalu???

Jen v Delphi....


Přesměrování výstupu vašeho programu na tiskárnu

V některých případech může být nutné vytisknout data vygenerovaná programem přímo na tiskárně. Jak na to:


Čtení ze vstupního souboru

Velmi užitečná bude funkce čtení ze souboru, který může přenést jiná osoba. Zde je příklad, jak to lze provést.


V Pascalu...


(BEGIN INFILE.TXT) 2 Ahoj světe Můj program funguje a tento text je toho důkazem. (END INFILE.TXT) Další informace naleznete v Příručce pro vývojáře. Přečtěte si popis funkcí AssignFile, Assign, Reset, Rewrite, readln, writeln, Close, CloseFile.

Lekce 15. Práce se soubory

V této lekci se podíváme na velmi důležité téma v programování – práci se soubory.
Téměř v každém programu potřebujete kopírovat, otevírat, měnit, ukládat a někdy i mazat soubory.

Jak víte, soubory mají různé formáty a používají se pro ně různé programy pro zpracování. Například soubory obrázků BMP, textové soubory TXT atd. Soubory mají různé názvy a specifickou příponu, která má v prostředí MS-DOS maximálně tři znaky. Pokud má soubor příponu RAR, pak uživatel a operační systém vědí, že se jedná o archivátor, a windowsw používá ke zpracování tohoto souboru nástroje specifikované ve speciální sekci registru.

Kopírování souborů

Funkce CopyFile slouží ke kopírování souborů. Jeho formát je takový:

CopyFile(Source_file, Write_file, Overwrite_flag);

kde: Source_file – úplná cesta a název kopírovaného souboru;

Write_file – úplná cesta a název souboru, kam je zdrojový soubor zkopírován;

Overwrite_flag – zda ​​bude či nebude přepsán soubor, pokud již existuje (true – nebude, false – bude přepsán).

CopyFile je funkce, která vrací příznak, zda byla operace kopírování úspěšná nebo ne.

Například následující řádek:

pokud ne CopyFile("c:\command.com","c:\1.com",true) then ShowMessage("Chyba kopírování");

zkopíruje soubor command.com do souboru 1.com pouze v případě, že tento neexistuje, jinak zobrazí chybové hlášení při kopírování.

Přesouvání souborů

Funkce MoveFile slouží k přesouvání souborů. Má následující formát:

MoveFile(Source_file, Write_file);

Jeho parametry jsou podobné jako u výše uvedeného příkazu, až na absenci příznaku přepisu.

pokud ne MoveFile("c:\1.com","c:\2.com") then ShowMessage("Chyba přesunu");

Přejmenování souborů

Funkce RenameFile

pokud ne RenameFile("c:\2.com","c:\3.com") then ShowMessage("Chyba přejmenování");

U všech výše uvedených příkazů jsou parametry zdrojového a cílového souboru typu PChar. Je to typ řetězce zakončený nulou. Možná jste již o tomto datovém formátu řetězce slyšeli.

Do takové proměnné lze uložit velmi dlouhý řetězec. Jeho velikost je omezena přítomností nulového bajtu na konci. Teoreticky může mít taková proměnná nekonečnou velikost. V praxi je omezena velikostí přidělené paměti pro program (2GB).

Převod obyčejné řetězcové proměnné typu String na PChar se provádí funkcí:

PChar(proměnná_řetězce).

procedure TForm1.Button1Click(Sender: TObject);

Var InDir,OutDir:String; // deklarace řetězcových proměnných

začít

InDir:="c:\1\"; // adresář se zdrojovými soubory

OutDir:="c:\2\"; // adresář souborů, které mají být zapsány

CopyFile(PChar(InDir+"1.txt"),PChar(OutDir+"1.txt"),false);

CopyFile(PChar(InDir+"2.txt"),PChar(OutDir+"2.txt"),false);

konec;

Zde máme operaci zřetězení dvou řetězcových proměnných.

Výsledkem tohoto postupu bude zkopírování souborů c:\1\1.txt a c:\1\2.txt do adresáře c:\2. Soubory jsou zkopírovány pod stejnými názvy.

Mazání souborů

Funkce DeleteFile

pokud ne DeleteFile("c:\3.com") then ShowMessage("Delete error");

Práce s textovými soubory. Čtení z textového souboru

V předchozích lekcích jsme v komponentě Memo provedli proces načítání a zápisu textového souboru následovně:

Memo1.Lines.SaveToFile(FileName);

// uložit

To vše díky vlastnosti Lines, která linky ukládá.
Následující příklad zpracování textového souboru je velmi podobný tomu v Pascalu.

Ti znalí mohou cítit rozdíl, protože existují určité rozdíly.

procedureTForm1.Button1Click(Sender: TObject);

Varf:TextFile; // deklarace proměnné souboru ulice:Řetězec

začít

; // řetězcová proměnná

AssignFile(f,"c:\1.txt"); // vazba názvu souboru na proměnnou souboru

($I-) // zakáže kontrolu chyb I/O

Reset(f); // otevřít soubor pro čtení

($I+) // povolení sledování chyb I/O<>0 ifIOResult pak

začít

// pokud dojde k chybě otevírání, pak

ShowMessage("Chyba při otevírání souboru C:\1.TXT");

Výstup; // ukončí proceduru, pokud dojde k chybě při otevírání souboru;

konec Zatímco ne EOF(f) dělat

začít

// smyčka až do konce souboru:

Výstup; // ukončí proceduru, pokud dojde k chybě při otevírání souboru;

ShowMessage(st); // vypíše řetězec uživateli

konec;

CloseFile(f); // zavřete soubor

Dovolte mi okomentovat některé řádky tohoto příkladu.

Příkaz AssignFile váže řetězec cesty k souboru s proměnnou souboru. Všechny další operace s proměnnou soubor se automaticky provedou se zadaným souborem. Aby nedošlo k záměně, zadejte úplnou cestu k souboru.

IOResult je proměnná, která ukládá chybový kód poslední I/O operace. Pokud je nula, byla poslední operace úspěšně dokončena.

EOF(File) – funkce, která vrací znak konce souboru. Tito. ukazuje, zda bylo dosaženo konce otevřeného souboru nebo ne.

ReadLn(File, Variable) – procedura pro čtení proměnné ze souboru. Na rozdíl od příkazu Read čte řádek končící znakem nového řádku pod kódy 13 a 10 (klávesa Enter).

CloseFile(File) – postup pro uzavření dříve otevřeného souboru.

Práce s textovými soubory. Zápis do textového souboru

Podívejme se na příklad:

procedure TForm1.Button1Click(Sender: TObject);

Var f:TextFile; // ukazatel na textový soubor

AssignFile(f,"c:\1.txt");

// vazba názvu na proměnnou

Append(f);<>0 // otevřete soubor pro přidání pokud IORsult

pak //

Append(f);<>pokud dojde k chybě při otevírání (například neexistuje žádný soubor)

Rewrite(f);

// vytvořte nový soubor

0 pak // chyba při vytváření souboru

ShowMessage("Chyba při vytváření souboru C:\1.TXT");

WriteLn(f,"Ahoj");

// zapíše do souboru řetězec se znaky nového řádku

CloseFile(f);

// zavřete soubor Procedura Append otevře soubor pro zápis a nastaví ukazatel zápisu na konec souboru, tzn. všechny řádky přidané do souboru budou zapsány na konec souboru.

V našem případě na samém začátku souboru nemusí být 1.txt na disku, takže příkaz k otevření souboru pro připojení způsobí chybu. V tomto případě se spustí naše vlastní kontrola chyb a provede se příkaz k vytvoření souboru. Zápis a čtení netextových dat ze souboru soubor Uvažujme příklad, kdy program při ukončení uloží svou velikost a polohu okna na obrazovce do souboru a při následném spuštění obnoví stav, který byl při ukončení. Program se skládá ze dvou procedur OnShow a OnClose pro okno Form1 programu. postup

TForm1.FormShow(Sender: TObject);

začít

Var

F:

z

Celé číslo; // proměnná souboru, zadejte celé číslo

I:Integer; // celočíselná proměnná AssignFile(f,"pos.ini");<>0 ifIOResult($I-)

Reset(f);

($I+)

-li

($I+)

IORsult

($I+)

Výstup;

Form1.Top:=i; // horní pozice okna

Výstup; // ukončí proceduru, pokud dojde k chybě při otevírání souboru;

// zavřete soubor Read(f,i); var Form1.Left:=i; // pozice levého okna

V našem případě na samém začátku souboru nemusí být 1.txt na disku, takže příkaz k otevření souboru pro připojení způsobí chybu. V tomto případě se spustí naše vlastní kontrola chyb a provede se příkaz k vytvoření souboru. Zápis a čtení netextových dat ze souboru soubor Uvažujme příklad, kdy program při ukončení uloží svou velikost a polohu okna na obrazovce do souboru a při následném spuštění obnoví stav, který byl při ukončení. Program se skládá ze dvou procedur OnShow a OnClose pro okno Form1 programu. Form1.Width:=i; // šířka okna

Form1.Height:=i; // výška okna : « CloseFile(f); TForm1.FormClose(Sender: TObject; »

Akce: TCloseAction);

Soubor

Celé číslo;

Podrobit

Práce se zadaným souborem

Delphi

Vyviňte aplikaci, která vám umožní pracovat se zadaným souborem výběrem příslušné položky nabídky:

Pohled

Editace

Pečeť

Pečeť

Adresáře

Documenta

Dodavatelé

Odstranění

Požadavky na aplikaci:

    Všechny globální datové typy, konstanty a proměnné umístěte do samostatného modulu (Unit2), který musí být propojen s ostatními moduly projektu přes položku nabídky Soubor / Použít jednotku.

    Chcete-li zadat zdrojová data do souboru (položky nabídky „Adjustment“ a „Add“), vytvořte vstupní formulář na obrazovce. Zajistěte ověření správnosti vstupních dat pomocí události OnKeyPress.

    Zobrazení dat ze souboru musí být implementováno jejich výstupem do tabulky StringGrid.

    Při implementaci položky nabídky „Úprava“ by se na vstupním formuláři měly zobrazit „staré“ hodnoty polí upravovaného záznamu.

    Položka nabídky "Odstranit" by měla poskytovat možnost smazat jeden záznam ze souboru podle výběru uživatele.

    Implementujte podmíněný tisk pomocí komponenty QuickRep a dalšího textového souboru.

    Dokument můžete vytisknout pomocí metody Form10.Print tak, že nejprve umístíte potřebné informace do formuláře.

    Na formuláři kromě hlavního menu umístěte:
    - obrázek odpovídající předmětu úkolu;
    - panel nástrojů (komponenta ToolBar) a přidat k němu několik SpeedButtonů, duplikujících některé položky hlavního menu.

    Práce s aplikací by měla začít zadáním hesla do samostatného formuláře, aby se zabránilo neoprávněnému přístupu k datům.

    Když poprvé otevřete formulář obsahující položky hlavní nabídky úlohy, měly by být dostupné pouze položky „Soubor“ a „Konec“.

    Pro tlačítka použijte komponentu BitBtn, přiřaďte barvu a velikost písma a také obrázek, který odpovídá významu.

    Pokud chcete, umístěte smysluplný obrázek vlevo od názvu některých položek nabídky pomocí vlastnosti Bitmap (Program Files\Common Files\Borland Shared\Images\Buttons)

    Ve formuláři „Zobrazit všechny záznamy v souboru“ uspořádejte vyhledávání záznamu a zajistěte, aby se nalezený záznam zobrazil na samostatném formuláři.

Informace o příjmu zboží na sklad: datum příjmu, dodavatel, název produktu, cena, množství - nutno uložit do typizovaného souboru. Podmínkou prohlédnutí je produkt od vybraného dodavatele. Podmínkou tisku je převzetí zboží k určitému datu. Dokladem je komoditní karta.

POSTUP PŘI SPLNĚNÍ ÚKOLU:

    Vytvořte novou aplikaci

    Na Form1 vytvořte hlavní nabídku podle podmínek úlohy.

    Umístěte komponentu Image1 na Form1. V Inspektoru objektů přiřaďte komponentě Image1 následující vlastnosti:
    Zarovnat = alClient

Natáhnout = pravda
Obrázek - soubor s obrázkem

    Přidejte do projektu nový modul Soubor / Nový / Jednotka a v sekci Rozhraní napište

Ttov = záznam // struktura záznamu obsahující informace o produktu pro
// zadaný soubor

DateP:TdateTime; // termín dodání

Postav: řetězec ; // dodavatelská společnost

Produkt: řetězec; // název produktu

Cena: skutečná; // cena produktu

Kol:integer; // množství zboží

V našem případě na samém začátku souboru nemusí být 1.txt na disku, takže příkaz k otevření souboru pro připojení způsobí chybu. V tomto případě se spustí naše vlastní kontrola chyb a provede se příkaz k vytvoření souboru. Tov: Ttov; // záznam obsahující informace o produktu

F1, F3: soubor Ttov; // zadali soubor pro ukládání informací o produktu

F2: textFile; // textový soubor pro implementaci podmíněného tisku

Name_F: string; // Jméno soubor

. . . // další proměnné, které budou potřeba k vyřešení problému

    Produktový adresář"(Soubor/Nový/Formulář). Formulář „Katalog produktů“ musí obsahovat komponenty ListBox, Edit, Label a dvě tlačítka BitBtn, která vám umožní uložit obsah Upravit do ListBoxu a celý obsah ListBoxu do textového souboru. Pro komponentu ListBox v Inspektoru objektů nastavte vlastnost Sorted na True, pak budou položky seřazeny v abecedním pořadí.

    V Inspektoru objektů pro formulář Katalog produktů vyberte událost OnActivate. Napište kód programu do postupu:

Pokud FileExists('tovar.txt') = true then ListBox1.items.LoadFromFile('tovar.txt');

    V Inspektoru objektů vyberte událost OnClick pro tlačítko Přidat do seznamu. Napište kód programu do postupu:

Listbox1.Items.Append(Edit1.text);

Edit1.Text:= "";

    V Inspektoru objektů pro tlačítko Odebrat ze seznamu vyberte událost OnClick. Napište kód programu do postupu:

If MessageDlg("Smazat záznam?", mtConfirmation, , 0) = mrYes

potom ListBox1.items.Delete(ListBox1.itemindex);

    V Inspektoru objektů vyberte událost OnClick pro tlačítko Zavřít. Napište kód programu do postupu:

ListBox1.items.SaveToFile('tovar.txt');

    V Inspektoru objektů vyberte událost OnClick pro tlačítko Zavřít. Napište kód programu do procedury: Form3.Close ;

    Udělejte totéž s formulářem " Adresář dodavatelských firem».

    V postupu pro vyvolání položky nabídky „Produkty“ zadejte kód programu:
    Form3.Show;

    V postupu pro vyvolání položky nabídky „Dodavatelé“ zadejte kód programu:
    Form4.Show;

    Umístěte komponentu SaveDialog1 na Form1. Napište programový kód pro postup položky nabídky " Vytvořit»:

Pokud SaveDialog1.Execute = true, pak

Name_F:= SaveDialog1.FileName ;

AssignFile(F1, Name_F) ;

Přepsat(F1); // soubor bude vytvořen a otevřen pro zápis

CloseFile(F1); // zavírání soubor

N1.Enabled:= true; // odstavec menu Soubor

N2.Enabled:= true; // odstavec menu Celé číslo;

N3.Enabled:= true; // odstavec menu Podrobit

N4.Enabled:= true; // položka nabídky Tisk

N5.Enabled:= true; // odstavec menu Delphi

N6.Enabled:= true; // položka nabídky Konec

    Umístěte komponentu OpenDialog1 na Form1. Napište programový kód pro postup položky nabídky " OTEVŘENO»:

if OpenDialog1.Execute = true pak

Name_F:= OpenDialog1.FileName ;

AssignFile(F1, Name_F);

N1.Enabled:= true; // odstavec menu Soubor

N2.Enabled:= true; // odstavec menu Celé číslo;

N3.Enabled:= true; // odstavec menu Podrobit

N4.Enabled:= true; // položka nabídky Tisk

N5.Enabled:= true; // odstavec menu Delphi

N6.Enabled:= true; // položka nabídky Konec

    V Inspektoru objektů pro Form1 vyberte událost OnCreate. Napište kód programu do postupu:

N1.Enabled:= true; // odstavec menu Soubor

N2.Enabled:= false; // odstavec menu Celé číslo;

N3.Enabled:= false; // odstavec menu Podrobit

N4.Enabled:= false; // položka nabídky Tisk

N5.Enabled:= false; // odstavec menu Delphi

N6.Enabled:= true; // položka nabídky Konec

    Přidat nový formulář do aplikace " Přidání» pro zadání počátečních dat do souboru. Umístěte komponenty dateTimePicker1, Combobox1, Combobox2, edit1, edit2, Button1 do formuláře. Zkontrolujte správnost zadávání dat do komponent edit1, edit2 pomocí události OnKeyPress.

    U komponent Combobox vypněte vstup z klávesnice (protože data by měla být vybírána pouze z adresářů). Chcete-li to provést, zapište kód programu do procedury události OnKeyPress: Pokud ne (zadejte ), pak klíč:= #0;

    V Inspektoru objektů pro formulář Přidat zadejte vlastnost Caption jako Přidání záznamu a vyberte událost OnActivate. Napište kód programu do postupu:

Konec; //

Tov.Tovar:= Combobox1.text;

Tov.Postav:= Combobox2.text ;

Reset(f1); // otevřel soubor pro zápis

Seek(F1, Filesize(F1)); // přejděte na poslední záznam souboru

Write(F1,Tov); // zapsat záznam do souboru

Edit1.text:= ''; // čištění

Edit2.text:= '';

ComboBox1.text:= '';

ComboBox2.text:= '';

    Přidat nový formulář do aplikace " Zobrazit všechna data" pro výstup dat ze souboru. Umístěte komponentu StringGrid1 na formulář. V Inspektoru objektů pro formulář Zobrazit všechna data vyberte událost OnActivate. Napište kód programu do postupu:

Reset(F1); // otevřel soubor ke čtení

StringGrid1.RowCount: = FileSize(F1)+1 ; //

šířka prvního pole tabulky

šířka druhého pole tabulky

Stringgrid1.ColWidths := 100; //

Stringgrid1.ColWidths := 100; // šířka pátého pole tabulky

Reset(f1); // otevřel soubor ke čtení

Zatímco ne eof(F1) ano

Read(F1,tov) ; // číst záznam ze souboru

    Přidat nový formulář do aplikace " Zobrazit podle stavu" pro výstup dat ze souboru. Umístěte komponenty Label, ComboBox1, BitBtn1 a StringGrid1 na formulář. V Inspektoru objektů pro formulář Podmíněné zobrazení vyberte událost OnActivate. Napište kód programu do postupu:

If FileExists('postav.txt') = true then ComboBox1.items.LoadFromFile('postav.txt');
StringGrid1.visible:= false ;

    V Inspektoru objektů pro komponentu BitBtn1 nastavte vlastnost Caption na ‚View‘ a vyberte událost OnClick. Napište kód programu do postupu:

If ComboBox1.text = '' Pak // pokud není vybrán žádný dodavatel, pak...

ShowMessage(‘Vyplňte všechna pole!‘);

Konec; // nucený odchod z postupu

Reset(F1); // otevřel soubor ke čtení

Zatímco ne eof(F1) ano

Read(F1,tov) ; // číst záznam ze souboru

Pokud tov.Postav = ComboBox1.text pak K: = K + 1 ;

Pokud k = 0 Pak // pokud neexistuje žádný produkt od vybraného dodavatele, pak...

ShowMessage('Neexistuje žádný produkt od vybraného dodavatele!');

Konec; // nucený odchod z postupu

StringGrid1.RowCount: = k+1 ; // nastavte počet řádků v tabulce

StringGrid1.CoLCcount: = 5 ; // nastavte počet sloupců v tabulce

StringGrid1. FixedCols:= 0 ; // počet pevných sloupců

StringGrid1. FixedRows:= 1; // počet pevných linek

Stringgrid1.ColWidths := 100; // šířka prvního pole tabulky

Stringgrid1.ColWidths := 120; // šířka druhého pole tabulky

Stringgrid1.ColWidths := 130; // šířka třetího pole tabulky

Stringgrid1.ColWidths := 100; // šířka čtvrtého pole tabulky

Stringgrid1.ColWidths := 100; // šířka pátého pole tabulky

StringGrid1.CeLLs := 'Datum dodání' ;

StringGrid1.CeLLs := ‘Název produktu’ ;

StringGrid1.CeLLs := 'Dodavatel' ;

StringGrid1.CeLLs := ‘Jednotková cena’ ;

StringGrid1.CeLLs := 'Množství' ;

Reset(f1); // otevřel soubor ke čtení

i:= 1; // i– číslo řádku tabulky pro výstup dat ze souboru

Zatímco ne eof(F1) ano

Read(F1,tov) ; // číst záznam ze souboru

Pokud tov.Postav = ComboBox1.text tak

StringGrid1.CeLLs := DateToStr(tov.DateP) ;

StringGrid1.CeLLs := tov.Tovar ;

StringGrid1.CeLLs := tov.Postav ;

StringGrid1.CeLLs := FloatToStr(tov.cena) ;

StringGrid1.CeLLs := intToStr(tov.kol) ;

i:= i + 1; // přejít na další řádek

StringGrid1.visible:= true ;

    Přidat nový formulář do aplikace " Oprava dat", chcete-li změnit položku souboru (například Formulář8). Na formulář umístěte stejné součásti jako na formulář „Přidat“. Zkontrolujte správnost zadávání dat do komponent edit1, edit2 pomocí události OnKeyPress.
    V Inspektoru objektů pro formulář Úprava dat vyberte událost OnActivate. Napište kód programu do postupu:

Pokud FileExists('tovar.txt') = true then ComboBox1.items.LoadFromFile('tovar.txt');

If FileExists('postav.txt') = true then ComboBox2.items.LoadFromFile('postav.txt');

    V postupu v položce nabídky „Adjustment“ napište kód programu:

Form6.Show ; //
Z:= 44; //
// "Úprava"

V Inspektoru objektů pro komponentu StringGrid1 formuláře Zobrazit všechna data vyberte událost OnDbLClick. Napište kód programu do postupu:

Li z = 44 pak

Y:= StringGrid1.Row ; //

Resetovat (F1); // otevřel soubor ke čtení

Hledat (F1, y – 1) ; //

Read(F1, Tov) ; // číst záznam ze souboru

Form8.dateTimePicker1.Date:= Tov.DateP ;

Form8.Combobox1.text:= Tov.Tovar ;

Form8.Combobox2.text:= Tov.Postav ;

Form8.edit1.text:= FLoatToStr(Tov.Cena) ;

Form8.edit2.text:= intToStr(Tov.Kol);

If (Edit1.tetx = '') nebo (Edit2.text = '') nebo (ComboBox1.text = '') nebo (ComboBox2.text = '') Pak začněte

ShowMessage(‘Vyplňte všechna pole!‘);

Konec; // nucený odchod z postupu

Resetovat (F1); // otevřel soubor pro zápis

Hledat (F1, y – 1) ; // přesunuta v souboru do záznamu číslo y-1

Tov.DateP:= dateTimePicker1.Date;

Tov.Tovar:= Combobox1.text;

Tov.Postav:= Combobox2.text ;

Tov.Cena:= StrToFloat(edit1.text);

Tov.Kol:= StrToInt(edit2.text);

Write(F1,Tov); // zapsat záznam do souboru

Edit1.text:= ''; // čištění

Edit2.text:= '';

ComboBox1.text:= '';

ComboBox2.text:= '';

    V postupu položky nabídky " Odstranění» napište kód programu:

Form6.Show ; // vyvoláním formuláře „Zobrazit všechna data“.
Z:= 55; // znamení, že jsme otevřeli formulář „Zobrazit“ z položky nabídky
// "Smazat"

V Inspektoru objektů pro komponentu StringGrid1 formuláře Zobrazit všechna data vyberte událost OnDblClick. Dokončete postup s kódem programu:

Li z = 55 pak

Otv:= MessageDlg ("Smazat záznam?", mtConfirmation, , 0) ;

pokud Otv = mrYes pak

Y1:= StringGrid1.Row ; // určuje číslo aktuálního řádku tabulky

Y2:= Yi-i; // číslo položky souboru, který má být smazán

AssignFile(F3, 'vysledek.dat');

Přepsat(F3); //

Resetovat (F1); // otevřel soubor ke čtení

Zatímco ne eof(F1) udělejte

Pokud FilePos(F1) Y2 pak

Read(F1, tov) ; // číst záznam ze souboruF1

Zapis(F3, tov) ; // napsal záznam do souboruF3

ELSE Přečíst(F1,tov);

Deletefile(Name_F) ; // smazáno originál soubor

RenameFile('result.dat', Name_F); // přejmenován souborvýsledek.dat

    Přidat nový formulář do aplikace " Tisk podle podmínek" Umístěte komponenty Label, DateTimePicker, BitBtn na formulář.

    Po výběru události OnClick pro tlačítko „Tisk“ zapište programový kód do procedury, která zajistí vytvoření textového souboru obsahujícího záznamy z typovaného souboru, které splňují podmínku tisku:

AssignFile(F2, 'pechat.txt');

Přepsat(F2); // vytvořil a otevřel soubor pro zápis

Resetovat (F1); // otevřel soubor ke čtení

K1:= 0; // počáteční hodnota pro počítání počtu záznamů pro zadané datum

Zatímco ne eof(F1) udělejte

Read(F1, tov) ; //

Pokud DateToStr(tov.DateP) = DateToStr(DateTimePicker1.date), pak

D:= DateToStr(DateTimePicker1.date) ;

K1:= K1 + 1; // počítání počtu záznamů k určenému datu

WriteLN(F2, tov.Tovar: 20, tov.Postav: 20, tov.Cena: 20: 2, tov.Kol: 15) ; // zaznamenáno v
textový soubor

    Přidejte do aplikace nový formulář (Form10).

    nainstalujte komponentu QuickRep1 na Form10, který se nachází na stránce QREPORT palety komponent;

    v Object Inspector vyberte podvlastnost HasPageHeader ve vlastnosti Bands a nastavte ji na True, což zajistí, že záhlaví bude přítomno v
    výstupní dokument;

    v Object Inspector vyberte podvlastnost HasTitle ve vlastnosti Bands a nastavte ji na True, což zajistí přítomnost záhlaví ve výstupním dokumentu;

    nainstalujte komponentu QRStringsBand, která se nachází na stránce QREPORT palety komponent, na komponentu QuickRep1;

    v Object Inspector pro komponentu QuickRep1 vyberte podvlastnost HasPageFooter ve vlastnosti Bands a nastavte ji na True, což zajistí přítomnost patičky ve výstupním dokumentu;

    nainstalujte komponentu QRMemo1, která se nachází na stránce QREPORT palety komponent, na pás sestavy HasPageHeader komponenty QuickRep1. V Inspektoru objektů ve vlastnosti Řádky zapište informace o organizaci, do jejíhož skladu se zboží přijímá;

    nainstalujte komponentu QRLabel1, která se nachází na stránce QREPORT palety komponent, na pás sestavy HasTitle komponenty QuickRep1. V Object Inspectoru přiřaďte vlastnosti Caption hodnotu "Informace o příjmu zboží pro ". V Inspektoru objektů změňte hodnoty vlastnosti Písmo, aby název dokumentu vyčníval z hlavních informací;

    nainstalujte komponentu QRLabel2, která se nachází na stránce QREPORT palety komponent, na pás sestavy HasTitle komponenty QuickRep1. Doplňte programový kód pro tlačítko „Tisk“ na následujícím řádku:
    Form10.QRLabel2.Caption:= D ;

    Nainstalujte komponentu QRExpr1 na komponentu QRStringsBand, která se nachází na stránce QREPORT palety komponent. V Inspektoru objektů nastavte vlastnost Expression na QRStringsBand1;

    nainstalujte komponentu QRLabel3, která se nachází na stránce QREPORT palety komponent, na pás sestavy HasPageFooter komponenty QuickRep1. V Inspektoru objektů přiřaďte vlastnosti Caption hodnotu „Datum a čas vytvoření dokumentu“;

    nainstalujte komponentu QRSysData1, která se nachází na stránce QREPORT palety komponent, na pás sestavy HasPageFooter komponenty QuickRep1. V Inspektoru objektů přiřaďte vlastnosti Data hodnotu qrsDateTime;

    nainstalujte komponentu QRLabel4, která se nachází na stránce QREPORT palety komponent, na pás sestavy HasPageFooter komponenty QuickRep1. V Inspektoru objektů přiřaďte vlastnosti Caption hodnotu "Celkový počet produktů:";

    nainstalujte komponentu QRLabel5, která se nachází na stránce QREPORT palety komponent, na pás sestavy HasPageFooter komponenty QuickRep1. Přidejte následující řádek do programového kódu tlačítka "PRINT":
    Form10.QRLabel5.Caption:= intToStr(k1);

    přidejte následující programový kód do těla procedury-handler pro událost "Stisknutí tlačítka PRINT":

ShowMessage('Pro zvolené datum nejsou žádné dodávky!');

Konec; // nucený odchod z postupu

form10.QRSStringsBand1.Items.Clear;

form10.QRSStringsBand1.Items.LoadFromFile("pechat.txt");

form10.QREpr1.AutoSize:=false;

form10.QREpr1.AutoStretch:=true;

form10.QRExpr1.Left:=0;

forma10.QRExpr1.Width:=form10.QRSStringsBand1.Width;

form10.QuickRep1.Preview;

    Přidejte do aplikace nový formulář (Form11). V Inspektoru objektů přiřaďte vlastnosti Caption hodnotu "Karta produktu". Na formulář umístěte stejné komponenty jako na formuláři „Přidat“, ale místo komponent dateTimePicker1, Combobox1 a Combobox2 použijte komponenty Edit3, Edit4 a Edit5 a přejmenujte tlačítko „Uložit“ na „Tisk“

    V postupu položky nabídky " Tisk dokumentu» napište kód programu:

Form6.Show ; // vyvoláním formuláře „Zobrazit všechna data“.
Z:= 66; // znamení, že jsme otevřeli formulář „Zobrazit“ z položky nabídky
// "Vytisknout dokument"

V Inspektoru objektů pro komponentu StringGrid1 formuláře Zobrazit všechna data vyberte událost OnDbLClick. Dokončete postup s kódem programu:

Li z = 66 pak

Y:= StringGrid1.Row ; // určuje číslo aktuálního řádku tabulky

Resetovat (F1); // otevřel soubor ke čtení

Hledat (F1, y – 1) ; // přesunuta v souboru do záznamu číslo y-1

Read(F1, Tov) ; // číst záznam ze souboru

CloseFile(F1);

Form11.Edit5.text:= DateToStr(Tov.DateP) ;

Form11.Edit4.text:= Tov.Tovar ;

Form11.Edit3.text:= Tov.Postav ;

Form11.Edit1.text:= FLoatToStr(Tov.Cena) ;

Form11.Edit2.text:= intToStr (Tov.Kol) ;

    V Inspektoru objektů pro tlačítko Tisk na Formuláři 11 vyberte událost OnClick. Napište kód programu do procedury: Form11.Print ;

Pokud Edit1.text = … pak

End ELSE ShowMessage ('Heslo je nesprávné');


V Inspektoru objektů pro tlačítko Najít vyberte událost OnClick. Napište kód programu do postupu:

Resetovat (F1); // otevřel soubor ke čtení

Zatímco ne eof(F1) udělejte

Read(F1, tov) ; // číst záznam ze zadaného souboru

Pokud (DateToStr(tov.DateP) = DateToStr(DateTimePicker1.date)) a (tov.Postav = Combobox1.text) pak

Formulář 13. Štítek6. caption:= DateToStr (Tov.DateP) ;

Formulář 13. Štítek7. titulek:= Tov.Tovar ;

Formulář 13. Štítek8. popisek:= Tov.Postav ;

Formulář 13. Štítek9. caption:= FloatToStr (Tov.Cena) ;

Formulář 13. Štítek10. caption:= IntToStr (Tov.Kol) ;

CloseFile(F1);

Pokud XX = 0, pak ShowMessage (‚Žádná data…‘) ;

Zavolá se pojmenovaná oblast paměti na externím médiu (disku). soubor. Jakýkoli soubor má Jméno. Informace, který je uložen v souboru, je sada prvků stejného typu. Velikost soubor je obvykle omezen pouze kapacitou zařízení, na kterém je uložen, což umožňuje zpracovávat velké množství informací.

Způsob vyhlášení soubor závisí na jeho typu. Existují tři typy souborů:

text;

zadali;

netypizovaný.

Textový soubor, sestává z posloupnosti libovolných znaků. Znaky tvoří řádky, z nichž každý končí znakem konce řádku. Samotný konec souboru je označen symbolem "konec souboru". Při zápisu informací do textového souboru jsou všechna data převedena na typ znaku a uložena v této podobě. Textový soubor můžete zobrazit pomocí libovolného textový editor.

Popis textového souboru:

var název_proměnné: TextFile;

Zadaný soubor sestává z prvků stejného typu, jejichž počet není předem určen a může být libovolný. Končí také symbolem „konec souboru“. Data v zadávaném souboru jsou uložena v binárním kódu a textové editory je neprohlížejí. Deklarace takových souborů vypadá takto:

název_proměnné: soubor typu;

V netypované soubory informace se čtou a zapisují do formuláře bloky určité velikosti, mohou ukládat data libovolného typu a struktury. Popis nezadaného souboru:

var název_proměnné: soubor;

Pro přístup k souboru použijte speciální souborová proměnná.

Například:

c:soubor celého čísla;

Pro komunikace souborová proměnná se souborem na disku, použijte postup:

AssignFile(proměnná, název souboru);

zde proměnná je název proměnné libovolného typu souboru, název_souboru je řetězec znaků obsahující celé jméno souboru (pokud není uvedena cesta k souboru, předpokládá se, že se nachází v aktuálním adresáři).

Například:

S:='text.txt';

přiřadit(f,’d:\tp\tmp\abc.dat’);

Pro otevření existujícího souboru použijte postup:

Reset(proměnná_souboru);

Po otevření souboru je k dispozici jeho první komponenta.

Chcete-li vytvořit nový soubor nebo odstranit informace z existujícího souboru, použijte následující postup:

Rewrite(proměnná_souboru);

Po provedení různých operací by měl být soubor ZAVŘENO. K tomu použijte postup

CloseFile(proměnná_souboru);

Záznam dat do textového souboru se provádí procedurami

Write(proměnná, seznam_výrazů);

Writeln(proměnná, seznam_výrazů);

kde seznam_výrazů jsou výrazy typu znak, celé číslo, reálné číslo, řetězec nebo logické typy, které budou zapsány do souboru spojeného s proměnnou souboru.

Procedura Writeln přidá zakončení řádku na konec každého řádku.

PŘÍKLAD. Podprogram, který se vytváří na disku D soubor abc.txt a zapíše do něj násobilku.

var f:TextFile; i,j:byte;

assignFile(f,"d:\abc.txt");

pro i:=2 až ​​9 do

pro j:= 2 až 9 do

write(f,i,"*",j,"=",i*j," ");

Čtení dat ze souboru se provádí sekvenčně od začátku souboru postupem

Readln(proměnná, seznam_proměnných);

zde seznam proměnných uvádí proměnné, do kterých budou zapsána data načtená ze souboru spojeného s proměnnou souboru.

Procedura Readln se po načtení dalšího prvku ze souboru přesune na další řádek.

Volání následujícího podprogramu způsobí, že text ze souboru se objeví ve formuláři v editačním okně D:\abc.txt:

procedure TForm1.Button1Click(Sender: TObject);

a:string; i:integer;

AssignFile(f1,"D:\abc.txt");

pro i:=1 až 8 do

Memo1.Lines.Add(a);

Platí také pro zadané soubory postupy čtení A evidence

Read(proměnná, seznam proměnných);

Write(proměnná, seznam_výrazů);

pouze typy výrazů pro zápis a čtení musí odpovídat deklarovanému typu souboru. Procedury Writeln a Readln se nevztahují na zadané soubory.

Pro procházení zadaným souborem použijte postup:

Hledat(proměnná, číslo);

Tento postup vám umožní přejít na prvek se zadaným číslem, to znamená, že se provede přímý přístup ke komponentám souboru. S přímým přístupem jsou součásti souboru číslovány od 0 do n-1, kde n je počet součástí v souboru.

Pro přímý přístup ke komponentám zadaného souboru můžete také použít následující funkce:

filesize(proměnná) – vrací počet skutečných komponent v otevřeném souboru přidružených k file_variable (pro prázdný soubor funkce vrátí 0);

filepos(proměnná) – vrací hodnotu aktuální pozice v otevřeném souboru spojenou s proměnnou file (pokud byl soubor právě otevřen, funkce vrátí nulu; po načtení poslední komponenty ze souboru se hodnota funkce shoduje s velikost souboru, což znamená, že bylo dosaženo konce souboru).

Procedura Seek a funkce filesize a filepos nefungují s textovými soubory. Následující rutiny fungují jak se zadávanými, tak s textovými soubory:

Přejmenovat (proměnná, název souboru)

přejmenuje uzavřený soubor spojený s proměnnou souboru podle názvu uvedeného v řádku názvu souboru;

Erase(variable) – smaže uzavřený soubor spojený s proměnnou souboru;

Eof(proměnná) se vyhodnotí jako pravda, pokud je dosaženo konce souboru spojeného s proměnnou_souboru, v opačném případě má hodnotu false;

PŘÍKLAD. Níže uvedený podprogram funguje takto. Otevře skutečný soubor d:\abc.dat a zapíše se do něj určitý počet reálných čísel vypočítaných vzorcem. Vytvořený soubor není možné zobrazit, protože informace v něm jsou prezentovány v binárních kódech.

procedure TForm1.Button1Click(Sender: TObject);

AssignFile(f,"d:\abc.dat");

n:=StrToInt(Edit1.Text);

pro i:=1 až n do

a:= sqr(i)/sqrt(i);

Abyste se ujistili, že zápis do souboru d:\abc.dat proběhlo úspěšně, zobrazme jeho hodnoty v editačním okně:

procedure TForm1.Button1Click(Sender: TObject);

f1:soubor skutečné;

AssignFile(f1,"D:\abc.dat");

zatímco ne eof (f1) do

Memo1.Lines.Add(FloatToStr(a));

ÚKOL. Na disku E existuje soubor celých čísel abc.int, zaměňte jeho maximální a minimální prvky.

Následující program funguje takto. Komponenty souboru jsou načteny do pole. Prvky pole se zobrazí v poli Memo1. Poté se hledají minimální a maximální prvky pole a jejich indexy. Maximální a minimální složky jsou přepsány do souboru na odpovídajících pozicích.

Nakonec se prvky převedeného souboru zobrazí v poli Memo2.

procedure TForm1.Button1Click(Sender: TObject);

f:soubor celého čísla;

a:array of integer;

i,nmax,nmin:byte; max,min:integer;

AssignFile(f,"e:\abc.int");

for i:=0 na velikost souboru(f)-1 do

Memo1.Lines.Add(FloatToStr(a[i]));

max:=a; nmax:=0;

min:=a; nm:=0;

for i:=1 na velikost souboru(f)-1 do

pokud a[i]>max pak

pokud [i]

for i:=0 na velikost souboru(f)-1 do

Memo2.Lines.Add(FloatToStr(a[i]));




Nahoru