Array einlesen und ausgeben bis zu einem gewissen Punkt

  • Heute ists mal wieder so weit, ich steh an und komm nicht mehr weiter :(

    habe eine Datei von der ich einen Speziellen Bereich auslesen muss vorher nichts und nachher nichts.
    Diese Werte können mal mehr mal weniger sein und sehen ca so aus

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

    9100
    9200
    9300
    9400
    9500
    9600
    9700
    9800
    9900
    10000
    10100
    10200
    10300
    10400

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

    können mal mehr mal weniger sien, vorne und hinten ist immer text und auch Zahlen.
    Gott sei dank ist am anfang immer die gleiche zahk und dannach immer ein Freiraum, jetzt habe ich mir gedacht ich lasse mir das ganze aus geben bis zum freiraum
    Jetzt habe ich das ganze mittels File to array eingelesen, stehe nun aber an wie ich die nun ausgeben kann
    mittels array search kann ich den wert ja finden... nur dann wie weiter??

    wäre für jeden input dankbar

  • So schauts derweil aus:

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

    #include <file.au3>
    #Include <string.au3>
    #Include <Array.au3>
    Dim $asettings
    If Not _FileReadToArray("settings.txt", $asettings) Then
    MsgBox(4096, "Fehler", "Fehler beim Einlesen der Datei!" & @CRLF & "Fehlercode: " & @error)
    Exit
    EndIf
    $sSearch = " 9100"
    _ArrayDisplay($asettings)
    $iIndex = _ArraySearch($asettings, $sSearch)
    If @error Then
    MsgBox(0, "Nicht gefunden", '"' & $sSearch & '" wurde in dem Array nicht gefunden.')
    Else
    MsgBox(0, "Gefunden", '"' & $sSearch & '" wurde in dem Array an Stelle ' & $iIndex & " gefunden.")
    EndIf

    [/autoit]

    Tja nur stehe ich nun an was ich damit mache wenn ich es gefunden habe. Absicht ist das er alles was dannach kommt bis zum "null" also bis zum ersten Feld ohne daten einliest und in ein eigenes Array packt, das ich dann woanders weiterbenutze.

    Die Textzeile um die es geht sieht im Array so aus

    (die Nummern sind die vom Array an der Position steht es)

    Was mir jetzt grade auffällt ist das die stelle wo nichts steht also 198 mit |V| angegeben wird.
    Problem ist halt, es endet nicht immer bei 198, mal gehts weiter und mal nicht.

    Danke für die Hilfe auf alle Fälle

  • Der Bereich beginnt immer mit "9100" und endet mit "V"?

    Vielleicht so? (ungetestet)

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    #Include <string.au3>
    #Include <Array.au3>
    Dim $asettings, $i = 0, $sresult, $aresult
    If Not _FileReadToArray("settings.txt", $asettings) Then
    MsgBox(4096, "Fehler", "Fehler beim Einlesen der Datei!" & @CRLF & "Fehlercode: " & @error)
    Exit
    EndIf
    $sSearch = " 9100"
    _ArrayDisplay($asettings)
    $iIndex = _ArraySearch($asettings, $sSearch)
    If @error Then MsgBox(0, "Nicht gefunden", '"' & $sSearch & '" wurde in dem Array nicht gefunden.')
    while 1
    if $sSearch[$iIndex+$i] <> "V" then
    $sresult &= $sSearch[$iIndex+$i] &"|"
    $i += 1
    Else
    $i = 0
    ExitLoop
    endif
    wend
    $aresult =stringsplit( StringtrimRight($sresult, 1), "|")
    _ArrayDisplay($aresult)

    [/autoit]
  • nein er endet mit
    "|V|"
    ist aber zumindest mal ein tipp mit dem ich arbeiten kann. Danke sehr :)

  • Vielleicht hilft diese Funktion:

    Spoiler anzeigen
    [autoit]

    Global $SuchArray[10] = ["ab","cd","efg","hi","jklm","nop","q","rs","tuvw","xyz"]
    $FundArray = _ArrayBetween($SuchArray,"efg","rs")
    #include <Array.au3>
    _ArrayDisplay($FundArray)

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

    Func _ArrayBetween($aArray,$sStart,$sStop,$iStart=0,$iStop=0,$iRet=0)
    ;SEuBo
    If Not IsArray($aArray) Then Return SetError(1)
    If $iStop = 0 Then $iStop = UBound($aArray)-1
    For $i = $iStart to $iStop
    If $aArray[$i] = $sStart Then
    Local $sRet = $aArray[$i] & "|"
    For $b = $i+1 to $iStop
    $sRet &= $aArray[$b] & "|"
    If $aArray[$b] = $sStop Then
    If $iRet = 0 Then
    Return StringSplit(StringTrimRight($sRet,1),"|")
    Else
    Return $sRet
    EndIf
    EndIf
    Next
    Return SetError(2,2)
    EndIf
    Next
    SetError(2,1)
    EndFunc

    [/autoit]