ForEach Probleme -.-

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

ForEach Probleme -.-

Beitrag von Tsuki-Namida »

hallo,
warum geht PB nicht in die ForEach Schleife in diesem Code???

Code: Alles auswählen

While NextElement(DateiList())
  T$ = DateiList()\Datei
  T = DateiList()\groese
  ;CallDebugger
  ForEach DateiListAlt()
    Debug "überprüfung"
    If DateiListAlt()\Datei = T$
      Debug "gefunden"
    EndIf
  Next
Wend
danke schon mal für antwort...
Bild
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag von Ja! »

Vielleicht hat die Liste 0 Elemente?

Teste einfach mit Debug countlist(Listenname) vor dem ForEach

Gruß
PureBasic 3.94 ; 4.2 ; 4.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

oder die liste wurde nicht resettet vor dem while...

insgesamt ist das snippet zu wenig, um ne klare antwort zu geben.

füge noch ein debug vor der ForEach ein,
um zu sehen, ob überhaupt die While-schleife läuft...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

okay das hätte ja sein können dem ist aber leider nicht so...

es sind in beiden listen elemente und resettet habe ich auch vorher...


ich habe vor dateien zu überprüfen also ob neue da sind oder ob was geändert wird.... in der Alt liste sind die daten wie sie forher waren (in einer txt gespeichert für die spätere überprüfung) und in der anderen liste sind die daten die gerade vorhanden sind also lese ich das verzeichnis erst aus...

hier ist noch ein stück von dem quellen text...

Code: Alles auswählen

AltList$ = Projekt$+"FileList.txt"
If OpenFile(0,AltList$)
  While Eof(0) = 0
    A$ = ReadString(0)
    SetGadgetText(12,A$)
    If FindString(T$," = ",1)
      a = FindString(A$," = ",1)
      T$ = Mid(A$,1,a-1)
      b = Len(A$)
      T = Val(Mid(A$,a+3,b))
      AddElement(DateiListAlt())
      DateiListAlt()\Datei = T$
      DateiListAlt()\groese = T
    EndIf
    Delay(5)
  Wend
  CloseFile(0)
EndIf
ResetList(DateiListAlt()):ResetList(DateiList())
SetGadgetText(11,"Vergleichen der Daten:")

While NextElement(DateiList())
  T$ = DateiList()\Datei
  T = DateiList()\groese
  ;CallDebugger
  ForEach DateiListAlt()
    Debug "überprüfung"
    If DateiListAlt()\Datei = T$
      Debug "gefunden"
    EndIf
  Next
Wend
Bild
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Gibt es eigendlich irgendeinen Error?

Andreas
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

nein gibt es leider nicht... sonnst wüsste ich woran das liegen könnte....
Bild
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

Beitrag von NicTheQuick »

Geht dieser Code?

Code: Alles auswählen

NewList DateiList.s()
NewList DateiListAlt.s()

Define a.l, found.l

;Dateien 0 bis 100
For a.l = 0 To 100
  AddElement(DateiListAlt())
  DateiListAlt() = "Datei" + Str(a)
Next

;10 Dateien von 0 bis 200
For a = 1 To 10
  AddElement(DateiList())
  DateiList() = "Datei" + Str(Random(200))
Next

ForEach DateiList()
  T$ = DateiList()
  ;CallDebugger
  Debug T$
  found = #False
  ForEach DateiListAlt()
    If DateiListAlt() = T$
      found = #True
      Break
    EndIf
  Next
  If found
    Debug "gefunden: " + T$
  Else
    Debug "nicht gefunden: " + T$
  EndIf
Next
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

okay dein code geht.... aber warum nicht meiner....

naja ich werde mir erst noch mal deinen code ansehen... und schauen was da nun anderst ist...

[edit]
okay ich habe es übernommen.... aber ich bekomme immer gesagt das der eintrag nicht gefunden wurde aber ich weis das alle einträge vorhanden sind... hier noch mal der geänderte code...

Code: Alles auswählen

ForEach DateiList()
  T$ = DateiList()\Datei
  T = DateiList()\groese
  Debug T$+" = "+Str(T)
  found = #False
  ForEach DateiListAlt()
    Debug "überprüfung"
    If DateiListAlt()\Datei = T$
      found = #True
      Break
    EndIf
  Next
  If found
    Debug "gefunden: " + T$
  Else
    Debug "nicht gefunden: " + T$
  EndIf
Next
[edit2]

okay ich komme noch nicht mal in diese ForEach DateiListAlt() schleife rein...
Zuletzt geändert von Tsuki-Namida am 30.01.2008 19:10, insgesamt 1-mal geändert.
Bild
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

Beitrag von NicTheQuick »

Bist du sicher, dass in beiden Listen Dateien sind? Ich nämlich nicht.

Oder warum steht da ein T$?

Code: Alles auswählen

AltList$ = Projekt$+"FileList.txt"
If OpenFile(0,AltList$)
  While Eof(0) = 0
    A$ = ReadString(0)
    SetGadgetText(12,A$)
    If FindString(T$," = ",1)   ;<-- wieso steht da ein T$
      a = FindString(A$," = ",1)
      T$ = Mid(A$,1,a-1)
      b = Len(A$)
      T = Val(Mid(A$,a+3,b))
      AddElement(DateiListAlt())
      DateiListAlt()\Datei = T$
      DateiListAlt()\groese = T
    EndIf
    Delay(5)
  Wend
  CloseFile(0)
EndIf 
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

Ich nutze immer T$ als einen Temp String bzw Variabel dann erst geht es weiter mit A$....

aber das erklärt warum da nichts gefunden wird... da in diesemfall T$ einen falschen inhalt bzw. keinen inhalt hat...

wie du denke ich mal schon richtig vermutet hast muss da A$ hin -.-

naja jedenfals war das der fehler und danke noch mal für deine hilfe.... ich hätte bestimmt morgen und nächste woche noch danachgesucht und nicht gefunden...

im eigenem code ist mal halt blind.... bzw. ich
Bild
Antworten