![]() |
komische TXT-Datei in Array auslesen
Hallo erstma!
Ich habe eine Txt-Datei mit folgendem Inhalt ///Anfang der Datei Liste Filter: Handersen Horst Lars 05a Behrensen Malte 05a Biederichen Alina 06a .... .... ... ///Ende der Datei Der Inhalt der Datei soll in ein mehrdimensionales Array geschrieben werden (aber erst ab Zeile 3, bei Null angefangen zu Zählen ) Der Nachname hat genau 21 feste Zeichen zur Verfügung, dann kommt ein TAB, der Vorname hat 24 feste Zeichen, wieder ein TAB, die Klassenbezeichnung hat 7 feste Zeichen, dann gibs nen Zeilensprung -> nächster Datensatz Ich hab mir die Formatierung nicht ausgesucht, aber so kommt es aus einem externen Programm Wie mache ich daraus ein 2D-Array mit 3 Spalten ohne die ganzen überflüssigen Leerzeichen ? |
Re: komische TXT-Datei in Array auslesen
hallo willkommen bei dp :dp: ,
was hast du denn schon? was ist dein eigentliches problem? gruß |
Re: komische TXT-Datei in Array auslesen
|
Re: komische TXT-Datei in Array auslesen
Also meine Funktion sollte folgendes machen:
1. zur Zeile 3 gehen 2. Zeichen 1 bis 21 auslesen -> Überflüssige Leerzeichen entfernen -> in Array speichern 3. über den Tab springen 4. Vorname auslesen und wie in 2. verfahren ..... Gibt es dafür passende Befehle oder muss man sich erst Hilfsfunktionen schreiben? Wie bewege ich mich in einem Text und kopiere daraus teile ohne die ganze Zeile zu kopieren? Quelltext habe ich noch keinen zustande gebracht, die Suche über Google hat mir zwar viele andere Probleme gezeigt aber nicht bei meinemweitergeholfen, da es dort meist um einfachere Formatierungen mit ";" ging. Freu mich auf jede Hilfe! |
Re: komische TXT-Datei in Array auslesen
hier gibt es eine wunderbare suche, da wirst du auch was finden...
lade die datei erst einmal in eine stringliste, dann sehen wir weiter... |
Re: komische TXT-Datei in Array auslesen
Zitat:
|
Re: komische TXT-Datei in Array auslesen
hy community!
Nicht das ihr denkt ich wär schon wieder gestorben! Danke für die Hilfe, hat bei mir das Brett vom Kopf entfernt und hab mich dann gleich mal auf die Suche gemacht!Habs leider verpennt zu posten, aber das hol ich jetzt mal nach! Würd mich über Kritik freuen, vllt kann man ja noch was vereinfachen! Hier ist mein TEST-quelltext:
Delphi-Quellcode:
function LeerzeichenSchneiden(folge: string ): string;
var laenge : integer; begin laenge:= Length(folge); while Copy(folge,laenge,laenge)= ' ' do begin laenge := laenge-1; folge := Copy(folge,0,laenge); end; // end of while result:= folge ; end; procedure TForm1.Button1Click(Sender: TObject); var sl:TStrings; //Variable für Stringlist definieren Zeile, Endzeile, Zname, Zvorname, Zklasse: integer; klassenbez: string ; begin sl:=TStringlist.Create; //StringList erzeugen sl.LoadFromFile('E:\...\schueler5a.txt'); //Die Zeilen einer Datei in eine Stringlist laden //sl.Add('Hallo'); //eine Zeichenkette ans Ende der Stringlist hinzufügen Zname := 20; // Der Name geht von Zeichen 1-20 = 20 Zeichen Zeichen 21 = TAB Zvorname := 22 ; // Der Vorname geht von Zeichen 22-43 = 22 Zeichen Zeichen 44 TAB Zklasse := 8 ; // Die Klasse geht von 44 bis 51 Endzeile:= sl.count-1 ; // Endzeile For Zeile:= 3 to Endzeile do begin StringGrid1.Cells[1,Zeile-2]:= LeerzeichenSchneiden( Copy(sl.strings[Zeile],1,Zname) ); StringGrid1.Cells[2,Zeile-2]:= LeerzeichenSchneiden( Copy(sl.strings[Zeile],22,Zvorname) ); klassenbez := LeerzeichenSchneiden( Copy(sl.strings[Zeile],45,Zklasse) ); StringGrid1.Cells[4,Zeile-2]:= copy(klassenbez,3,1); if Copy(klassenbez,0,1) = '0' then StringGrid1.Cells[3,Zeile-2]:= copy(klassenbez,2,1) else StringGrid1.Cells[3,Zeile-2]:= copy(klassenbez,1,2); end; // end of For sl.SaveToFile('datei.txt'); //Die Zeichenketten der Stringlist in Datei speichern sl.free; end; |
Re: komische TXT-Datei in Array auslesen
Servus!
2 kleine Tips für die Zukunft: 1) Was dir bisher keiner gesagt hat: Anstatt deiner "LeerzeichenSchneiden" kannste auch einfach "trim" benutzen. ;) Die Funktion schneidet sogar vorne und hinten alle Leerzeichen ab. 2) Wenn du den Code etwas formatierst, dann wird er gleich viel übersichtlicher. (Sprich: Jeden Block ein bißchen einrücken, also nach jedem Begin usw.) Könnte dann also so aussehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sl:TStrings; //Variable für Stringlist definieren Zeile, Endzeile, Zname, Zvorname, Zklasse: integer; klassenbez: string ; begin sl:=TStringlist.Create; //StringList erzeugen sl.LoadFromFile('E:\...\schueler5a.txt'); //Die Zeilen einer Datei in eine Stringlist laden //sl.Add('Hallo'); //eine Zeichenkette ans Ende der Stringlist hinzufügen Zname := 20; // Der Name geht von Zeichen 1-20 = 20 Zeichen Zeichen 21 = TAB Zvorname := 22 ; // Der Vorname geht von Zeichen 22-43 = 22 Zeichen Zeichen 44 TAB Zklasse := 8 ; // Die Klasse geht von 44 bis 51 Endzeile:= sl.count-1 ; // Endzeile For Zeile:= 3 to Endzeile do begin StringGrid1.Cells[1,Zeile-2]:= trim( Copy(sl.strings[Zeile],1,Zname) ); StringGrid1.Cells[2,Zeile-2]:= trim( Copy(sl.strings[Zeile],22,Zvorname) ); klassenbez := trim( Copy(sl.strings[Zeile],45,Zklasse) ); StringGrid1.Cells[4,Zeile-2]:= copy(klassenbez,3,1); if Copy(klassenbez,0,1) = '0' then StringGrid1.Cells[3,Zeile-2]:= copy(klassenbez,2,1) else StringGrid1.Cells[3,Zeile-2]:= copy(klassenbez,1,2); end; // end of For sl.SaveToFile('datei.txt'); //Die Zeichenketten der Stringlist in Datei speichern sl.free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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-2025 by Thomas Breitkreuz