For ... next schleife vorzeitig von anfang beginnen

  • Hallo, ich wieder...
    hab in der hilfe leider keine hilfe gefunden, suche sicherlich nach den falschen dingen :(

    Ich hab ne

    Code
    for $x = 1 to $einlesen[0]

    schleife welche ein array einließt und in ein anderes ausgibt. Da das einzulesende array teilweise fehlstellen hat bricht das prog aber gelegentlich ab.
    ich bin somit auf der suche nach einer Methode, welche bei @error nicht das programm komplett beendet sondern wieder an den Anfang der Schleife springt und mit $x+1 weitermacht. Exitloop beendet sie ja ganz... ?(

    8| so langsam merk ich das ich lang nichtsmehr mit autoit geschrieben hab, ich hoffe ihr verzeit mir :rolleyes:

    Grüße,
    hefe

    edit:
    idee: for-schleife in ne eigene func rein,

    Code
    for $x=$var to $einlesen[0]


    dann an die func startvariablen übergeben und bei nem @error exitloop ausführen und die func der schleife erneut mit $var+1 aufrufen.
    Aber das klingt für mich doch schon sehr brachial....

    2 Mal editiert, zuletzt von Hefe (1. September 2011 um 10:35)

  • Wenn unter Fehlstellen zu verstehen ist, dass der Eintrag leer ist, müsste doch folgendes funktionieren:

    [autoit]


    For $x = 1 To $einlesen[0]
    If $einlesen[$x] <> "" Then
    ;das was gemacht werden soll halt
    Else
    $x = $x + 1
    EndIf
    Next

    [/autoit]

    Falls ich dich richtig verstanden hab

    LG
    Balti

  • Enthält $einlesen[0] Die Anzahl der Arrayindexe? Wenn ja musst du noch ein -1 machen, oder UBound benutzen.
    Zum Anfang kommst du mit

    [autoit]

    ContinueLoop

    [/autoit]

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • hmm continueloop ... sache ist das es eine Abfrage in der for schleife ist. also ich hab z.b. wenn $i=1 ist mehrere lines aus dem array die in ein 2d array für die spätere ausgabe geschrieben werden. Teilweise auch noch mit schleifen drin. Könnte zwar dann nach jede einzelne abfragezeile ein "if @error continueloop" machen aber geht das nicht iwie simpler und übersichtlicher?

  • Ok aber es gibt nichts was ich sozusagen "semi"global innerhalb einer for schleife deklarieren kann was bei einem, wo auch immer (innerhalb der schleife) auftretenden @error continueloop macht oder?

  • wenn du mal den gesamten COde posten könntest, oder zumindest die For schleifen, dann wäre es einfacher zu helfen ;)

  • so schaut es mittlerweile aus. hab mich jetzt behilfsweise mit if abfragen abgesichert was bis hierher gut funktioniert, da so nur einzelne positionen ausgelassen werden und nicht ganze spalten.
    Glaube das ist die feinere lösung :huh:

    [autoit]

    For $y = 1 To $max

    [/autoit][autoit][/autoit][autoit]

    $line=_ArraySearch($Reader, "0"&$y&"0")
    If $line = -1 Then
    While 1
    $line=_ArraySearch($Reader, "0"&$y&"0",0,0,0,1)
    $help = StringSplit($Reader[$line]," ")
    If $help[4]="St" OR $help[4]="pc" Then ExitLoop
    WEnd
    EndIf
    $arrayout[$y][1]= StringLeft($Reader[$line],3)

    [/autoit][autoit][/autoit][autoit]

    If StringIsDigit($Reader[$line]) = 0 Then
    $help=StringSplit($Reader[$line], " ")
    If $help[0] >= 3 Then $arrayout[$y][4]=$help[3]
    If $help[0] >= 5 Then $arrayout[$y][8]=$help[5]
    $help=_ArraySearch($Reader,": ",$line,0,0,1)
    If StringIsDigit(StringTrimLeft($Reader[$help],2)) = 1 Then
    $arrayout[$y][2]=StringTrimLeft($Reader[$help],2)
    $arrayout[$y][3]="GL-" & StringMid($Reader[$help],4,2)
    EndIf
    $help=_ArraySearch($Reader, " mm",$help,0,0,1)
    $delete = $help
    $help=StringSplit($Reader[$help]," ")
    If $help[1]= "La" Then
    $arrayout[$y][5]=$help[3]
    _ArrayDelete($Reader,$delete)
    _ArrayDelete($Reader,$delete)
    $help = StringSplit($Reader[$delete]," ")
    $arrayout[$y][6]=$help[3]
    _ArrayDelete($Reader,$delete)
    Endif
    If $help[0] >= 5 Then
    $arrayout[$y][5]=$help[2]
    $arrayout[$y][6]=$help[4]
    If $help[4] = "x" Then $arrayout[$y][6]=$help[5]
    _ArrayDelete($Reader,$delete)
    EndIf
    Else
    $help=_ArraySearch($Reader," pc",$line,0,0,1)
    if $help = -1 Then $help=_ArraySearch($Reader," St",$line,0,0,1)
    $delete = $help
    $help= StringSplit($Reader[$help], " ")
    _ArrayDelete($Reader,$delete)
    $arrayout[$y][4]=$help[1]
    $help=_ArraySearch($Reader,": ",$line,0,0,1)
    If StringIsDigit(StringTrimLeft($Reader[$help],2)) = 1 Then
    $arrayout[$y][2]=StringTrimLeft($Reader[$help],2)
    $arrayout[$y][3]="GL-" & StringMid($Reader[$help],4,2)
    EndIf
    _ArrayDelete($Reader,$help)
    $help=_ArraySearch($Reader, " mm",$help,0,0,1)
    If $help = -1 Then
    $mass=$mass+1
    Else
    $delete = $help
    $help=StringSplit($Reader[$help]," ")
    If $help[1]= "La" Then
    $arrayout[$y][5]=$help[3]
    _ArrayDelete($Reader,$delete)
    _ArrayDelete($Reader,$delete)
    $help = StringSplit($Reader[$delete]," ")
    $arrayout[$y][6]=$help[3]
    _ArrayDelete($Reader,$delete)
    Endif
    If $help[0] >= 5 Then
    $arrayout[$y][5]=$help[2]
    $arrayout[$y][6]=$help[4]
    If $help[4] = "x" Then $arrayout[$y][6]=$help[5]
    _ArrayDelete($Reader,$delete)
    EndIf
    EndIf
    EndIf
    Next

    [/autoit]