For - Next Schleife geht nicht

Anfängerfragen zum Programmieren mit PureBasic.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

For - Next Schleife geht nicht

Beitrag 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.
Purebasic 5.51
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: For - Next Schleife geht nicht

Beitrag von Kiffi »

hier ist der Fehler versteckt:

Code: Alles auswählen

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

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: For - Next Schleife geht nicht

Beitrag 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.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: For - Next Schleife geht nicht

Beitrag 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
Purebasic 5.51
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: For - Next Schleife geht nicht

Beitrag 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$ = ...
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: For - Next Schleife geht nicht

Beitrag 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))
Purebasic 5.51
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: For - Next Schleife geht nicht

Beitrag 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
a²+b²=mc²
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: For - Next Schleife geht nicht

Beitrag von schleicher »

Hast recht, habe meinen letzten Beitrag darauf hin geändert. Irgendwo musste ja der Fehler liegen.
Purebasic 5.51
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: For - Next Schleife geht nicht

Beitrag von Derren »

Sorry, offtopic, aber

Code: Alles auswählen

ReadString(0,#PB_File_IgnoreEOL) 
Hallelujah!!! :praise: :allright:
Signatur und so
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: For - Next Schleife geht nicht

Beitrag 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:
a²+b²=mc²
Antworten