![]() |
AW: Textdatei in Record Muster überführen
Zitat:
Wobei die "Packed"-Falle natürlich nicht beachtet wird. Ebenso ist es besser gleich mit
Delphi-Quellcode:
zu arbeiten.
Sizeof
Wenn mit den gemachten Vorgaben, das Programm wirklich funktioniert, dann ist das reines Glück! Gruß K-H |
AW: Textdatei in Record Muster überführen
Danke, verstanden.
Aber das Programm läuft immernoch nicht. Sieht jemand einen Fehler? Ich möchte aus der erstellten record datei einen bestimmten record auslesen - mehr eigentlich nicht :? Muss ich an die Datei vom Typ Tperson 'recadressen.??' eine Endung hängen?? Wenn ja, was?? Ich bekomme keinen Fehler, aber auch keinen Inhalt im Memo. ABER die Warnung, dass person nicht initialisiert wurde in Zeile (siehe Code). Aktueller Code:
Code:
[...]
type Tperson=record nachname:string[20]; vorname:string[10]; plz:string[5]; ort:string[20]; strasse:string[20]; hausnummer:string[5]; vorwahl:string[5]; telefon:string[10]; end; [...] const recordsize = sizeof(Tperson); var Form1: TForm1; [...] function linetorec(var s:string):Tperson; //hier sollen später wenn person.nachname funktioniert die weiteren const //Eigenschaften von Tperson zugewiesen werden, d.h. semi = ';'; //ich will den string bis zum ersten semikolon löschen und wieder var //über pos nach dem neuen ersten semikolon suchen, dann wieder semiPos: integer; //löschen usw. person: Tperson; begin semiPos:=0; semiPos:=Pos(semi, s); person.nachname:= copy(s, 0, semiPos -1); result:=person; end; procedure TForm1.Button1Click(Sender: TObject); //Konvertieren: inhalt textfile an record datei übergeben var srcfile: textfile; destfile: file of Tperson; line: string; person: Tperson; begin assignfile(srcfile,'adressen.txt'); //Quelle öffnen reset(srcfile); assignfile(destfile,'recadressen.dat'); //Ziel öffnen rewrite(destfile); memo1.clear; while not eof(srcfile) do begin repeat readln(srcfile, line) //Zeile lesen until line <> ''; //bis irgendwas in line drin ist linetorec(line); //aus der Zeile, person(Tperson) machen write(destfile, person); //die Zieldatei (record) beschreiben.*Warning: Local var person does //not seem to be initialized. end; closefile(destfile); closefile(srcfile); end; procedure TForm1.Button2Click(Sender: TObject); //destfile lesen + ins memo var rec_pos: integer; anz_recs: integer; person: Tperson; destfile: file of Tperson; begin rec_pos:=strtoint(edit1.text); //gewünschte Person aus Edit1 lesen anz_recs:=filesize('recadressen') div recordsize; //grenzt die Eingabemögl. für Edit1 ein von 0..anz_recs label1.caption:=inttostr(anz_recs); assignfile(destfile, 'recadressen'); //record Datei öffnen reset(destfile); seek(destfile, rec_pos); //an die gewünschte Stelle fahren und read(destfile, person); //Person x auslesen memo1.clear; memo1.lines.add(person.nachname+...); //hier folgen später die weiteren Eigenschaften closefile(destfile); end; end. |
AW: Textdatei in Record Muster überführen
nun, wenn du die Datei unter einem bestimmten Namen speicherst (recadressen.dat)
solltest Du sie auch wieder unter dem gleichen öffnen. Ich würde an Deiner Stelle beim Abspeichern und Laden den Pfad mit angeben. Edit1:
Delphi-Quellcode:
ist meines Erachtens falsch.
anz_recs:=filesize('recadressen') div recordsize;
Bei typisierten Dateien gibt fileSize die Anzahl der Datensätze zurück und die die Dateigröße in Byte. Grüße Klaus |
AW: Textdatei in Record Muster überführen
Ganze Pfade eingeben klappt leider auch nicht.
Gebe ich filesize('recadressen') auf ein Label aus erhalte ich 1133.= das entspricht der Größe in byte Gebe ich recordsize auf ein Label aus erhalte ich 103. = alle Stringlängen(20+10+5+20+20+5+5+10=95) + Anzahl Eigenschaften von Tperson(das sind 8)--> 95+8=103. filesize() div recordsize also 11. Ich habe 11 Personen in meiner Datei stehen. Kommt also zumindest hin. Bedeutet das, dass meine Datei recadressen nicht richtig typisiert wurde? |
AW: Textdatei in Record Muster überführen
aus der Delphi Hilfe:
Zitat:
Delphi-Quellcode:
Grüße
rec_pos:=strtoint(edit1.text); //gewünschte Person aus Edit1 lesen
für Edit1 ein von 0..anz_recs assignfile(destfile, 'recadressen'); //record Datei öffnen reset(destfile); anz_recs:=filesize(destFile); //grenzt die Eingabemögl. label1.caption:=inttostr(anz_recs); seek(destfile, rec_pos); //an die gewünschte Stelle fahren und read(destfile, person); //Person x auslesen memo1.clear; memo1.lines.add(person.nachname+...); //hier folgen später die weiteren Eigenschaften closefile(destfile); Klaus |
AW: Textdatei in Record Muster überführen
das hieße ja meine angebliche record datei wurde nicht so wirklich typisiert, oder? Aber was ist der Grund?
|
AW: Textdatei in Record Muster überführen
Delphi-Quellcode:
Grüße
procedure TForm1.Button1Click(Sender: TObject); //Konvertieren: inhalt textfile an record datei übergeben
var srcfile: textfile; destfile: file of Tperson; line: string; person: Tperson; begin assignfile(srcfile,'adressen.txt'); //Quelle öffnen reset(srcfile); assignfile(destfile,'recadressen.dat'); //Ziel öffnen rewrite(destfile); memo1.clear; while not eof(srcfile) do begin repeat readln(srcfile, line) //Zeile lesen until line <> ''; //bis irgendwas in line drin ist //linetorec(line); //lineToRec ist eine Funktion mit dem Rückgabewert TPerson person := lineToRec(line); write(destfile, person); //die Zieldatei (record) beschreiben.*Warning: Local var person does //not seem to be initialized. // oder write(destFile,lineToRec(line)); end; closefile(destfile); closefile(srcfile); end; Klaus |
AW: Textdatei in Record Muster überführen
Vielen vielen Dank. :-D
Das war der Haken, hatte irgendwie an Prozeduren gedacht! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz