Seite 1 von 1

For - Next Schleife geht nicht

Verfasst: 20.06.2014 13:55
von schleicher
Irgendwie will die schleife nicht funktionieren. Sie durchläuft sie nur einmal und ich kann nicht herausfinden warum. Hier mal die Codeauskopplung testbar.

Code: Alles auswählen

Structure FTP_List
  chmod_raw.s
  chmod.s
  Name.s 
  size.s 
  Dat.s 
  Type.l
  Type2.l
  link.s
EndStructure
Global NewList FTP_List.FTP_List()



If ReadFile(0, "c:\test.txt")   
  f$=ReadString(0,#PB_File_IgnoreEOL) 
Else 
  MessageRequester("Information","Couldn't open the file!")
EndIf


ClearList(FTP_List())

    

For k=1  To CountString(f$, Chr(10))
  
  
  f$ = StringField(f$, k, Chr(10))
  
  AddElement(FTP_List())
  
  FTP_List()\chmod_raw.s=StringField(f$,1,",")
  FTP_List()\Name.s=StringField(f$,9,",")
  FTP_List()\size.s=StringField(f$,5,",")
  FTP_List()\dat.s=StringField(f$,6,",")+" "+StringField(f$,7," ")+","+StringField(f$,8,",")
  FTP_List()\type.l=Val(StringField(f$,2,","))
  FTP_List()\link.s=StringField(f$,11,",")
  ;file name with no spaces
  FTP_List()\name = StringField(f$, 9, ",")
  
  
  NextElement(FTP_List())
  
Next


ForEach FTP_List()
  Debug FTP_List()\Name
Next


und hier das dazugehörige Textfile test.txt

Code: Alles auswählen

drwxr-xr-x,2,0,0,0,Nov,02,2013,bin
drwxr-xr-x,2,0,0,0,Nov,02,2013,boot
drwxr-xr-x,8,0,0,12460,Jan,01,2000,dev
drwxr-xr-x,7,0,0,0,Jan,01,2000,dev.static
drwxr-xr-x,12,0,0,0,May,27,22:45,etc
lrwxrwxrwx,1,0,0,10,Nov,02,2013,hdd,->,/media/hdd
drwxr-xr-x,3,0,0,0,Nov,02,2013,home
drwxr-xr-x,8,0,0,0,Jan,01,2000,lib
drwxr-xr-x,5,0,0,0,Jan,01,2000,media
drwxr-xr-x,5,0,0,0,Nov,02,2013,mnt
dr-xr-xr-x,67,0,0,0,Jan,01,2000,proc
drwxrwxrwt,3,0,0,60,Jan,01,2000,ram
drwxr-xr-x,3,0,0,0,Apr,24,19:49,root
drwxr-xr-x,2,0,0,0,Nov,02,2013,sbin
drwxr-xr-x,2,0,0,0,Nov,02,2013,share
drwxr-xr-x,11,0,0,0,Jan,01,2000,sys
drwxrwxrwt,3,0,0,260,Jun,19,22:22,tmp
drwxr-xr-x,11,0,0,0,Jun,09,18:18,usr
drwxrwxr-x,15,0,0,0,Jun,18,14:12,var
Kann da jemand helfen ? Manchmal sieht man den Wald vor Bäumen nicht.

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 14:15
von Kiffi
hier ist der Fehler versteckt:

Code: Alles auswählen

f$ = StringField(f$, k, Chr(10))
Du überschreibst f$

Grüße ... Kiffi

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 14:15
von NicTheQuick
'CountString(f$, Chr(10))' wird bei jedem Schleifedurchlauf erneut aufgerufen. Da du innerhalb der Schleife '$f' veränderst, wird beim nächsten Durchlauf 'CountString(f$, Chr(10))' Null zurück geben und somit wird die Schleife nicht weiter ausgeführt.
Lösung des Problems wäre den Wert von 'CountString(f$, Chr(10))' in einer Variablen zwischen zu speichern und diese dann in der For-Next-Schleife zu benutzen.

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 14:26
von schleicher
Hm. Verstehe ich nicht ganz .

Code: Alles auswählen

CountString(f$, Chr(10))
gibt mir nur die Zeilenanzahl für die Anzahl des Schleifendurchlauf

und
f$ = StringField(f$, k, Chr(10))
heißt doch, das er von dem Textfile f$ die Zeile k nimmt. f$ wird dadurch nicht verändert.

Bei jedem Schleifendurchlauf bekommt k einen Wert + 1

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 14:31
von NicTheQuick
Natürlich wird 'f$' geändert. Du weist 'f$' doch den neuen Wert zu, in dem Fall die k-te Zeile. Da steht doch: f$ = ...

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 14:42
von schleicher

Code: Alles auswählen

f$ = StringField(f$, k, Chr(10))
Bei jedem Schleifendurchlauf nimmt er durch k nur eine andere Zeile von f$. Somit hast du recht das f$ verändert wird. Das soll ja auch, aber ich schaue da nochmal genauer hin.

Habe nun deinen Tip mit anderen Variablennamen innerhalb der Schleife genommen und siehe da nun funktionierts. Danke für den Tip.

Code: Alles auswählen

e$ = StringField(f$, k, Chr(10))

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 14:54
von Kiffi
schleicher hat geschrieben:Somit hast du recht das f$ verändert wird. Das soll ja auch [...]
nee, eben nicht. f$ enthält initial den Inhalt Deiner eingelesenen Datei.
Nach der Neuzuweisung enthält es nur noch den Inhalt der einzelnen Zeile.

Grüße ... Kiffi

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 15:03
von schleicher
Hast recht, habe meinen letzten Beitrag darauf hin geändert. Irgendwo musste ja der Fehler liegen.

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 15:39
von Derren
Sorry, offtopic, aber

Code: Alles auswählen

ReadString(0,#PB_File_IgnoreEOL) 
Hallelujah!!! :praise: :allright:

Re: For - Next Schleife geht nicht

Verfasst: 20.06.2014 16:05
von Kiffi
Derren hat geschrieben:Sorry, offtopic, aber

Code: Alles auswählen

ReadString(0,#PB_File_IgnoreEOL) 
Hallelujah!!! :praise: :allright:
:lol: darüber bin ich anfänglich auch gestolpert und ich habe gedacht,
dort läge Schleichers Fehler versteckt. Irgendwie schäme ich mich aber
auch ein wenig, weil es das schon seit mehr als einem Jahr gibt. :oops: