Logigproblem mit StringSplit

  • Hallo zusammen,

    habe ein kleines Konverterprogramm geschrieben. Das funktioniert auch bis auf eine Kleinigkeit super.

    Hier mal ein Auszug aus dem Code:

    [autoit]


    $array = _GetFilesFolder_Rekursiv($Suchordner, 'ste',0,0)

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

    For $i = 1 To $array[0]

    _ArrayDisplay($array, "Test0")
    winwait("abc")
    ; Datei, samt Pfad aus Array auslesen
    $sPfad_ste_Datei = $array[$i]
    MsgBox(0, "Test1", $sPfad_ste_Datei)
    winwait("abc")

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

    ; Dateipfad an \ trennen
    $arDatei_Name= StringSplit ($sPfad_ste_Datei, "\")
    _ArrayDisplay($arDatei_Name, "Test2")
    winwait("abc")

    ; Anzahl der Arrayeinträge abfragen
    $Letzter_String = $arDatei_Name[0]
    MsgBox(0, "Test3", $Letzter_String)
    winwait("abc")

    ;Dateiname samt Endung aus Array auslesen
    $Datei_Name_Endung = $arDatei_Name[($Letzter_String)]
    MsgBox(0, "Test4", $Datei_Name_Endung)
    winwait("abc")

    ; "Dateipfad samt Datei und Endung"-String an "Datei mit Endung"-String trennen
    $arDatei_Name_2 = StringSplit($sPfad_ste_Datei, $Datei_Name_Endung)
    MsgBox(0, "Test5", $sPfad_ste_Datei)
    winwait("abc")
    _ArrayDisplay($arDatei_Name_2, "Test6")
    winwait("abc")

    ; Dateipfad aus Array auslesen
    $Datei_Pfad = $arDatei_Name_2[1]
    MsgBox(0, "Test7", $Datei_Pfad)
    winwait("abc")

    ; "Datei mit Endung"-String an "." trennen
    $arDatei_Name_3= StringSplit ($Datei_Name_Endung, ".")
    _ArrayDisplay($arDatei_Name_3, "Test8")
    winwait("abc")

    ; Dateiname ohne Endung aus Array auslesen
    $Datei_Name = $arDatei_Name_3[1]

    FileCopy( $sPfad_ste_Datei, $Datei_Pfad & "\" & $Datei_Name & ".bac")

    "Hier kommen einige Mausklicks und Tastatursimulation"

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

    _ArrayEmpty($arDatei_Name_2)
    _ArrayDisplay($arDatei_Name_2)
    winwait("abc")
    Next

    [/autoit]

    Habe mir zum debuggen, ArrayDisplays und MsgBoxes eingebaut. Der Fehler liegt zwischen Test5 und Test6. Im ersten Schleifendurchgang funktioniert alles noch wie es soll. Aber bei den nächsten Durchgängen verhaut er sich irgendwie. Ich bekomme sowohl den $sPfad_ste_Datei als auch $Datei_Name_Endung korrekt angezeigt. Aber irgendwie funktioniert dann mein SplitString nicht mehr korrekt.

    BSP:
    unter C:\Temp liegt eine .ste Datei. Unter C:\Temp\NeuerOrdner liegt nochmal eine .ste Datei
    Ich möchte immer eine Kopie der Orginaldatei als Dateiname.bac im gleiche Verzeichnis wie die Orginaldatei ablegen. Dazu brauche ich den Pfad der Datei. Dieser ist in $Datei_Pfad gespeichert.
    Beim ersten Schleifendurchlauf stimmt der Ordner. Beim zweiten durchlauf nimmt er mir wieder den C:\Temp als Ordner obwohl er ja eigentlich C:\Temp\NeuerOrdner nehmen müsste?! Finde einfach den Fehler nicht.

    Wäre spitze, wenn mir jemand sagen könnte, was ich falsch mache. Oder wo vielleicht der Denkfehler ist.

    Gruß Bad_Rockk

    Einmal editiert, zuletzt von Bad_Rockk (9. Dezember 2010 um 13:44)

  • Hallo zusammen,

    habe mein Problem schon lösen können.

    Es hing an einem kleinen Flag im StringSplit Befehl. Mit:

    [autoit]

    $arDatei_Name_2 = StringSplit($sPfad_ste_Datei, $Datei_Name_Endung,1)

    [/autoit]

    funktioniert es. Das Problem war, dass mit der Defaulteinstellung jeder einzelne Buchstabe meines delimiters als delimiter angesehen wurde. Da der Ordner zufallig die gleichen Buchstaben enthält wie der Dateiname, wurden diese also auch als delimiter angesehen. Mit dem Flag = 1 werden nicht die einzelnen Buchstaben sondern der komplette String als Delimiter verwendet. Jetzt passt es also. :thumbup:

    Gruß
    Bad_Rockk