myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Ungelesen 13.10.17, 15:34   #1
hondocrx
Anfänger
 
Registriert seit: Sep 2008
Beiträge: 15
Bedankt: 119
hondocrx ist noch neu hier! | 0 Respekt Punkte
Standard vb.net Frage zu For Each -Schleife

Hallo!

Ich habe ein Array mit bestimmten Dateinamen welche gesucht werden sollen.

PHP-Code:
For Each sDateiname In arrDateiliste

    
if 
        
Existiert die date mach das 
    
else
        
mach das und ne kleine pause
        
--> DAS MÖCHTE ICH !
        
setz die FOR-Schleife um 1 zurück damit die Prüfung noch mal erfolgt
    end 
if

NEXT 
Im Prinzip möchte ich das im ELSE-Zweig die Forschleife nicht hochgezählt wird sDateiname noch mal geprüft wird.

Hat jemand eine Idee?

MfG
hondocrx ist offline   Mit Zitat antworten
Ungelesen 20.10.17, 13:45   #2
baldurgarda2
Newbie
 
Registriert seit: Oct 2016
Beiträge: 69
Bedankt: 95
baldurgarda2 wird langsam von ratten respektiert | 153 Respekt Punktebaldurgarda2 wird langsam von ratten respektiert | 153 Respekt Punkte
Standard

Mit For Each klappt das so nicht ;-) Bei dieser Schleife hat du keinen Zugriff auf den Interator ...

Besser du verwendest
Dim i As Integer = 0
While i < arrDateiliste.lenght
if
arrDateilist(i)
i += 1
else
i = i - 1
end if
End While
baldurgarda2 ist offline   Mit Zitat antworten
Ungelesen 21.10.17, 17:32   #3
Wornat1959
Profi
 
Registriert seit: Aug 2016
Beiträge: 1.859
Bedankt: 6.235
Wornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt Punkte
Standard

@baldurgulda:
Ja das Konstrukt For Each ist nicht für diese Anforderung gemacht. Ich würde aber auf jeden Fall bei einer echten Zählschleife bleiben. Du hast dir unbemerkt einen Fehler eingebaut.

Mal angenommen die Datei arrDateilist[0] gibt es nicht und es wird FALSE als boolscher Wert zurückgegeben - im Else-Fall ziehst du jetzt 1 ab und deine Zählvariable i steht auf -1.
Es wurde danach gefragt das die Prüfung nochmal mit der gleichen Datei wiederholt werden soll. Also ist die Subtraktion falsch. Für den geschilderten Fall kommt es zu einem Out-Of-Bounds-Error wegen arrDateiliste[-1]

@hondocrx
Ohne mich jetzt mit der Syntax von VB auszukennen tiefer würde ich bei der echten Zählschleife bleiben. Mach es wie folgt - musst du dann nur in passende VB-Syntax anpassen.

Code:
for (int lauf=0; lauf<Größe des Array arrDateiliste;lauf++)
{
     if (existiertDatei(arrDateiliste[lauf]))
     {
           mache irgendwas;
      }
     else
     {
           mache irgendwas;
           mache ne Pause;
           
           lauf--;
      }
}
Hier wird im Else-Zweig auch abgezogen, allerdings findet das lauf++ auch noch statt das immer automatisch kommt.
Noch etwas wenn die Datei nicht existiert und beim zweiten mal auch nicht dann prüft er weiter und weiter und weiter. Du musst also noch eine Art Abbruchbedingung einbauen damit du nicht in ein Endlossschleife steckenbleibst.

Vielleicht so:
Code:
int wie_oft_geprüft=0;
for (int lauf=0; lauf<Größe des Array arrDateiliste;lauf++)
{
     if (existiertDatei(arrDateiliste[lauf]))
     {
           mache irgendwas;
      }
     else
     {
           mache irgendwas;
           mache ne Pause;

           if (wie_oft_geprüft<2)
           {
               lauf--;
               wie_oft_geprüft++;
           }
           else
           {
               wie_oft_geprüft=0;
            }
      }
}
Jetzt wird die Zählvariable lauf aus der For-Schleife nur dann zurückgesetzt um 1 wenn nicht öfters als schon 2 mal geprüft worden ist. Sonst wird mit der nächsten Datei fortgefahren weil lauf nicht zurückgesetzt wurde.
Wornat1959 ist offline   Mit Zitat antworten
Ungelesen 21.10.17, 17:44   #4
baldurgarda2
Newbie
 
Registriert seit: Oct 2016
Beiträge: 69
Bedankt: 95
baldurgarda2 wird langsam von ratten respektiert | 153 Respekt Punktebaldurgarda2 wird langsam von ratten respektiert | 153 Respekt Punkte
Standard

Päpstlicher wie der Papst Ein leeres arrDateiliste.lenght gibt 0 zurück und 0 < 0 geht schwer in die Schleife
baldurgarda2 ist offline   Mit Zitat antworten
Ungelesen 21.10.17, 18:19   #5
Wornat1959
Profi
 
Registriert seit: Aug 2016
Beiträge: 1.859
Bedankt: 6.235
Wornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt Punkte
Standard

Das war nicht das Problem. Ich spreche nicht von einem von einem leeren arrDateiliste. Das wäre ja nur ein Sonderfall. Hinter arrDateiliste[x] stehen Strings die Dateinamen enthalten sollen. Der Dateiname wird dann genommen und es soll geprüft werden obs dazu die Datei gibt. Wenn nein machst du i=i-1;

Startet man also mit arrDateiliste[0]="irgendeinName" und die Prüfung sagt "Datei gibts nicht" kommt danach arr_Dateiliste[-1] wegen i=i-1. Das Array ist nicht auf einmal kleiner geworden wo es vorher noch den Namen kannte. Deswegen kann man auch in einen Out-Of-Bounds-Error laufen. Grundsätzlich ist i=i-1 wie du sagst, falsch. Du bleibst nicht auf dem Dateinamen zu einer Datei stehen, sondern gehst im Array einen Dateinamen zurück. Das war mein Einwand. Ist vielleicht nicht so klar rüber gekommen.

Geändert von Wornat1959 (21.10.17 um 18:26 Uhr)
Wornat1959 ist offline   Mit Zitat antworten
Ungelesen 22.10.17, 10:01   #6
baldurgarda2
Newbie
 
Registriert seit: Oct 2016
Beiträge: 69
Bedankt: 95
baldurgarda2 wird langsam von ratten respektiert | 153 Respekt Punktebaldurgarda2 wird langsam von ratten respektiert | 153 Respekt Punkte
Standard

Wenn man bei einer Grundsatzfrage "päpstlicher wieder Papst" sein will, kommt nie was klar rüber In VB.NET ist ein arrDateiliste[0]="irgendeinName", abgefragt mit arrDateiliste.lenght = 1

Und hondocrx fragte: setz die FOR-Schleife um 1 zurück um dieselbe Datei nochmals zu prüfen ...
baldurgarda2 ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.


Sitemap

().