csv- Datei auslesen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Nafets
Beiträge: 19
Registriert: 09.02.2005 21:01

csv- Datei auslesen

Beitrag von Nafets »

Kann mir jemand einen Ansatz zeigen, wie ich eine ASCII Datei, die mit Semikolon separierten Feldern gefüllt ist, auslesen kann ? In ein Array ? Jetzt schon vielen Dank für Eure Mühe ...
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Man nehme:
1 Schleife
1 Stringfield()
1 Array aus Strings
:wink:
Nafets
Beiträge: 19
Registriert: 09.02.2005 21:01

Beitrag von Nafets »

Sorry. Hätt vieleicht erwähnen sollen, dass ich Anfänger bin.
Kannst Du das etwas näher erläutern ? Danke
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ok:
Ich nehme jetzt an, dass die Datei so einen String enthält:
Data1;Noch was;Das Ende
NochneDate;nochetwas;jetzt wirklich das ende
Dann öffnet man die Datei zuerst mit

Code: Alles auswählen

OpenFile(0, "Name.txt")
Ich nehme jetzt mal an, dass eine Data (also zwischen zwei ;) keinen Zeilenumbruch enthalten kann (sonst muss man es noch ein wenig umbauen):

Code: Alles auswählen

While Eof(0) = 0
  Line.s = ReadString()
  ;Das was hier kommt steht unten
Wend
Das bedeutet also, dass solange eine Linie von der Datei eingelesen wird, bis das Ende der Datei erreicht wurde.
Nun muss mann dieses Line.s noch verarbeiten:
zuerst sollte man rausfinden wie viele Datensätze enthalten sind:

Code: Alles auswählen

Anz.l = CountString(Line, ";") + 1;vielleicht ohne +1
und nun wird der String Line in einer For-Schleife in die Einzelteile zerhackt:

Code: Alles auswählen

For z = 1 to Anz
  Data.s = StringField(Line, z)
Next
Jetzt muss noch ein Zähler x rein für das aktuelle Arrayelement und dann kann das Array gefüllt werden:

Code: Alles auswählen

Array(x) = Data

Wenn das nicht reicht, poste ich noch ein zusammenhängendes Beispiel!

greetz
remi
Nafets
Beiträge: 19
Registriert: 09.02.2005 21:01

Beitrag von Nafets »

Vielen Dank nochmal. Ich bin jetzt schon einiges weiter. :allright:
Aber auf das Angebot mit dem zusammenhängenden Beispiel würde ich trotzdem gern zurück kommen.

Gruß

Nafets
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Code: Alles auswählen

File.s = "C:\Test.txt"

If OpenFile(0, File)
  Dim Daten.s(2, 1) ;wenn nicht bekannt, müssen zuerst die ganze datei eingelesen
  ; und die datensätze gezählt werden
  
  x.l = 0 ; für Daten(x, y) ein zähler
  y.l = 0
  While Eof(0) = 0
    Line.s = ReadString()
    AnzDatas.l = CountString(Line, ";") + 1 ;ev. ohne +1, wenn am ende der zeile auch ein ; steht
    For z.l = 1 To AnzDatas
      Daten(x,y) = StringField(Line.s, z.l, ";")
      Debug Daten(x,y)
      x + 1 ;eine neue spalte beginnt
    Next
    x = 0 ;wieder mit spalte 1 beginnen
    y + 1 ;eine neue zeile beginnt
  Wend
  
EndIf
Nafets
Beiträge: 19
Registriert: 09.02.2005 21:01

Beitrag von Nafets »

Jetzt klappt die Sache. Besten Dank.
Vor allem, dass Du Dich mit so banalen Dingen abgibst.

War auf Deiner Website. Bin beeindruckt. :allright:

Gruß

Nafets
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ich helfe immer gern (wenn ich Zeit hab)! :)
Antworten