AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

komische TXT-Datei in Array auslesen

Ein Thema von robroy85 · begonnen am 6. Nov 2004 · letzter Beitrag vom 12. Nov 2004
Antwort Antwort
robroy85

Registriert seit: 6. Nov 2004
Ort: Norderstedt
42 Beiträge
 
#1

komische TXT-Datei in Array auslesen

  Alt 6. Nov 2004, 15:04
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#2

Re: komische TXT-Datei in Array auslesen

  Alt 6. Nov 2004, 15:13
hallo willkommen bei dp ,

was hast du denn schon? was ist dein eigentliches problem?

gruß
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: komische TXT-Datei in Array auslesen

  Alt 6. Nov 2004, 15:21
schau dir mal Delphi-Referenz durchsuchencopy und Delphi-Referenz durchsuchenpos an. Damit solltest du es machen können.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
robroy85

Registriert seit: 6. Nov 2004
Ort: Norderstedt
42 Beiträge
 
#4

Re: komische TXT-Datei in Array auslesen

  Alt 6. Nov 2004, 15:25
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!
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

Re: komische TXT-Datei in Array auslesen

  Alt 6. Nov 2004, 15:27
hier gibt es eine wunderbare suche, da wirst du auch was finden...

lade die datei erst einmal in eine stringliste, dann sehen wir weiter...
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: komische TXT-Datei in Array auslesen

  Alt 6. Nov 2004, 15:29
Zitat von robroy85:
da es dort meist um einfachere Formatierungen mit ";" ging.
Der Unterschied von ";" und " " ist ja nun nicht soooo groß, als dass man das nicht anpassen könnte
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
robroy85

Registriert seit: 6. Nov 2004
Ort: Norderstedt
42 Beiträge
 
#7

Re: komische TXT-Datei in Array auslesen

  Alt 12. Nov 2004, 09:41
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) = '0then
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;
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#8

Re: komische TXT-Datei in Array auslesen

  Alt 12. Nov 2004, 10:20
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) = '0then
      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;
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz