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]));