Seite 1 von 1

Textdatei Zeilenweise auslesen+in einen String speichern^^

Verfasst: 01.09.2006 00:28
von K.Putt
Dieses funktioniert nicht und ich verstehe nicht warum,
jede ausgelesene Zeile soll einem String hinzugefügt werden, sodass der String am Ende die ganze Datei enthält (sagen wir 100 Zeilen a 100 Zeichen)

Ich benötige dieses, da ich den String im Speicher umfassend bearbeiten und dann wieder speichern möchte.

Zeilenweise bearbeiten wäre eine Alternative, allerdings um eniges komplizierter, da es sich um eine XML Datei handelt, in der ich nach Tags suche und leider kommen viele Tags mehrmals vor, so dass ich ganze Abschnitte zugleich bearbeiten möchte und nicht nur eine Zeile einzeln.

Code: Alles auswählen

If ReadFile(0,"xml.txt") 
  While Eof(0)=0
   
   input.s = Trim(ReadString(0,))
 
 text.s=text.s+input.s 
; hier sollte doch eigentlich der string verlängert werden, wird er aber nicht....?
; Debug input.s dagegen gibt natürlich jede Zeile aus...  
  
  Wend
Debug text.s
;String is leer...
Liegt es daran, dass die Daten nicht in einen String passen oder habe ich einen anderen Denkfehler ?

Verfasst: 01.09.2006 00:36
von ts-soft
Bei mir geht es
Im Debugger steht natürlich alles in einer Zeile, aber es geht.

Verfasst: 01.09.2006 00:54
von K.Putt
PB 4 ?

EDIT...sorry, schon gelesen, a.
das ist ja merkwürdig ^^

Habs gerade noch mal getestet, geht nicht, auch nicht mit +#CRLF$ am ende jeder zeile...

Wie lang ist Deine Testdatei ?

EDIT_2
Also, es liegt tatsächlich an der Länge, ein String kann wohl doch nicht unendlich sein^^
bei 5 Zeilen klappt es, bei hunderten nicht mehr...

Verfasst: 01.09.2006 00:59
von ts-soft
Du kannst auch die Datei in einen Rutsch lesen und dann die Zeilen wieder Trennen. Beispiel:

Code: Alles auswählen

If ReadFile(0, "xml.txt")
  length = Lof(0)
  *Mem = AllocateMemory(length)
  If *Mem
    ReadData(0, *Mem, length)
  EndIf
  CloseFile(0)  
EndIf

NewList Lines.s()

Text.s = PeekS(*MEM, length)
For i = 1 To CountString(Text, #LF$) + 1
  AddElement(Lines())
  Lines() = ReplaceString(StringField(Text, i, #LF$), #CR$, "")
Next

ForEach Lines()
  Debug Lines()
Next

FreeMemory(*Mem)

Verfasst: 01.09.2006 01:07
von K.Putt
Hey, Super. Ich danke Dir, das wäre der nächste Ansatz für mich gewesen.
Hab schon probiert gehabt mit dem Speicher, aber das auslesen funktionierte nicht :freak:

Dein Code geht aber, ist genau das, was ich brauche.

Wünsche Dir eine geruhsame Nacht !

:allright:

Verfasst: 01.09.2006 01:11
von ts-soft
Aber gründlich testen, hab nur so auf die schnelle reingehackt :mrgreen:

Gute Nacht

Verfasst: 01.09.2006 01:13
von K.Putt
Hab ich, für "kurz reingehackt" verdammt gut :D