array was in split steht ersetzen und in txt schreiben

  • moin moin....
    nach langem testen und testen und wieder testen und suchen , komme ich nun nicht weiter

    ich besitze einige txt dateien die so aufgebaut sind


    [autoit]


    FILENAME YEAR FILM SERIE PICT_NR DATE TXT1 TXT2 TXT3 TXT4 KAT1 KAT2 KAT3 KAT4
    G180400101.JPG G 1804 01 001 03.05.2011 11:24:50 5409 Steinbergerhof D-HSEP M g F F
    G180400201.JPG G 1804 01 002 03.05.2011 11:25:02 5409 Steinbergerhof D-HSEP M g F F
    G180400301.JPG G 1804 01 003 03.05.2011 11:25:18 5409 Steinbergerhof D-HSEP M g F F
    G180400401.JPG G 1804 01 004 03.05.2011 11:25:40 5409 Steinbergerhof D-HSEP M g F F
    G180400501.JPG G 1804 01 005 03.05.2011 11:26:14 5409 Steinbergerhof D-HSEP M g F F
    G180400601.JPG G 1804 01 006 03.05.2011 11:26:22 5409 Steinbergerhof D-HSEP M g F F
    G180400701.JPG G 1804 01 007 03.05.2011 11:26:48 5409 Steinbergerhof D-HSEP M g F F
    G180400801.JPG G 1804 01 008 03.05.2011 11:26:52 5409 Steinbergerhof D-HSEP M g F F
    G180400901.JPG G 1804 01 009 03.05.2011 11:26:56 5409 Steinbergerhof D-HSEP M g F F
    G180401002.JPG G 1804 02 010 03.05.2011 11:33:34 5409 Hohenleimbach D-HSEP M g F F
    G180401102.JPG G 1804 02 011 03.05.2011 11:33:54 5409 Hohenleimbach D-HSEP M g F F
    G180401202.JPG G 1804 02 012 03.05.2011 11:34:42 5409 Hohenleimbach D-HSEP M g F F
    G180401302.JPG G 1804 02 013 03.05.2011 11:35:02 5409 Hohenleimbach D-HSEP M g F F
    G180401402.JPG G 1804 02 014 03.05.2011 11:35:22 5409 Hohenleimbach D-HSEP M g F F
    G180401502.JPG G 1804 02 015 03.05.2011 11:35:50 5409 Hohenleimbach D-HSEP M g F F

    [/autoit]


    ich möchte jetzt das in der zeile mit der nummer 5409 und dem namen Hohenleimbach das wort Hohenleimbach in zb (zu testzwecken) bratwurst geändert wird.
    ich habe diese werte mal fest in die GUI eingetragen zum schnelleren testen.


    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <Date.au3>
    #include <file.au3>
    #include <array.au3>
    #include <string.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 334, 317, 414, 145)
    $kartenblatt = GUICtrlCreateInput("5409", 16, 40, 137, 21)
    $Label1 = GUICtrlCreateLabel("Kartenblatt Nummer", 8, 16, 97, 17)
    $falsch = GUICtrlCreateInput("Hohenleimbach", 16, 112, 257, 21)
    $richtig = GUICtrlCreateInput("bratwurst", 16, 192, 257, 21)
    $Label2 = GUICtrlCreateLabel("ändere in", 16, 168, 48, 17)
    $Label3 = GUICtrlCreateLabel("Suche Name", 16, 88, 66, 17)
    $suche = GUICtrlCreateButton("SUCHEN", 24, 264, 75, 25, 0)
    $exit = GUICtrlCreateButton("Abrechen", 136, 264, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    case $suche
    suche()
    case $exit
    Exit
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    Func suche()
    $kb = GUICtrlRead($kartenblatt)
    $wrong = GUICtrlRead($falsch)
    $right = GUICtrlRead($richtig)
    ;### felder voll `?
    if $kb = "Nummer" or "" then
    MsgBox(0,"!!!","kartenblatt fehlt")
    Else
    EndIf
    if $wrong = "Ort" or "" then
    MsgBox(0,"!!!","falscher ort fehlt")
    Else
    EndIf
    if $right = "Ort" or "" then
    MsgBox(0,"!!!","richtiger ort fehlt")
    Else
    EndIf

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

    $list = _FileListToArray(@WorkingDir,"*.txt")

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

    for $a = 1 to $list[0]

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

    Dim $read
    _FileReadToArray(@WorkingDir&"\"&$list[$a],$read)
    for $b = 2 to $read[0]
    $split = StringSplit($read[$b],@Tab)

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

    if $split[7] =$kb and $split[8] =$wrong Then

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

    FileWriteLine(@WorkingDir &"\"&$list[$a],StringReplace($split[8],$wrong,$right))

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

    ;ConsoleWrite(StringReplace($split[8],$wrong,$right) & @CRLF)
    EndIf
    Next
    Next
    MsgBox(0,"bing","Fertig... ")
    exit
    EndFunc

    [/autoit]

    das script schreibt aber nur zu ende die bratwurst und erfüllt nicht die IF anweisung.....

    Einmal editiert, zuletzt von dragula (1. November 2011 um 10:34)

  • Das kann so kein Schwein entziffern. Bitte verwende einen anderen Browser um diesen Code zu posten, weil ich für meinen Teil hab keine Lust manuell alle verlorengegangenen Zeilenumbrüche einzufügen nur um zu wissen wo der Fehler liegt. ;)
    Firefox und selbst IE machen hier keine Probleme soweit ich weiß.

  • Das kann so kein Schwein entziffern.

    Naja Schweine können afaik nicht lesen. Ich hab mir mal die Mühe gemacht, hier das Ergebnis:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <file.au3>
    #include <array.au3>
    #include <string.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 334, 317, 414, 145)
    $kartenblatt = GUICtrlCreateInput("5409", 16, 40, 137, 21)
    $Label1 = GUICtrlCreateLabel("Kartenblatt Nummer", 8, 16, 97, 17)
    $falsch = GUICtrlCreateInput("Hohenleimbach", 16, 112, 257, 21)
    $richtig = GUICtrlCreateInput("bratwurst", 16, 192, 257, 21)
    $Label2 = GUICtrlCreateLabel("ändere in", 16, 168, 48, 17)
    $Label3 = GUICtrlCreateLabel("Suche Name", 16, 88, 66, 17)
    $suche = GUICtrlCreateButton("SUCHEN", 24, 264, 75, 25, 0)
    $Exit = GUICtrlCreateButton("Abrechen", 136, 264, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $suche
    suche()
    Case $GUI_EVENT_CLOSE, $Exit
    Exit
    EndSwitch
    WEnd

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

    Func suche()
    $kb = GUICtrlRead($kartenblatt)
    $wrong = GUICtrlRead($falsch)
    $right = GUICtrlRead($richtig)
    ;### felder voll `?
    If $kb = "Nummer" Or $kb = "" Then
    MsgBox(0, "!!!", "kartenblatt fehlt")
    Return
    EndIf
    If $wrong = "Ort" Or $wrong = "" Then
    MsgBox(0, "!!!", "falscher ort fehlt")
    Return
    EndIf

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

    If $right = "Ort" Or $right = "" Then
    MsgBox(0, "!!!", "richtiger ort fehlt")
    Return
    EndIf

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

    $list = _FileListToArray(@WorkingDir, "*.txt")

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

    For $a = 1 To $list[0] ;durch alle Textdateien gehen
    Dim $read
    _FileReadToArray(@WorkingDir & "\" & $list[$a], $read)
    Dim $aNew[$read[0]][15]
    For $iRow =1 To $read[0] ;Spaltenüberschriften müssen in dieser Version mit eingelesen werden
    $aSplit = StringSplit($read[$iRow], @TAB)
    If $aSplit[7] = $kb And $aSplit[8] = $wrong Then $aSplit[8]= $right ;wenn falscher Ort für diese Kartennr. dann mit richtigem ersetzen
    for $iCol = 1 to $aSplit[0] ;alle Spalten in das neue Array übertragen
    $aNew[$iRow-1][$iCol-1] = $aSplit[$iCol]
    Next
    Next
    _WriteNewArrayToFile(@WorkingDir & "\" & $list[$a] & ".New",$aNew) ;Neue Datei abspeichern
    Next
    MsgBox(0, "bing", "Fertig... ")
    Exit
    EndFunc ;==>suche

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

    Func _WriteNewArrayToFile($sFile, ByRef $a2D,$sRowDelimiter=@CRLF,$sColDelimiter=@TAB)
    ;author autoBert
    ;Parameter: $sFile Name der neuen Datei
    ; $$a2d 2D-Array das zurückgespeichert werden soll
    ; $sRowDelimiter Zeilentrennzeichen
    ; $sColDelimiter Spaltentrennzeichen
    Local $hFile = FileOpen($sFile,2)
    for $iRow = 0 to UBound($a2D) -1
    for $iCol = 0 to UBound($a2D,2)-1
    FileWrite($sFile,$a2D[$iRow][$iCol])
    if $iCol = UBound($a2D,2)-1 Then
    FileWrite($sFile,$sRowDelimiter)
    Else
    FileWrite($sFile,$sColDelimiter)
    EndIf
    Next
    Next
    FileClose($sFile)
    EndFunc

    [/autoit]

    getestet habe ich mit diesen Daten:

    dragula: diesen Service bekommst du aber nicht jeden Tag, also in Zukunft an die Ratschläge von name22 halten und für jeden lesbare Skripte und Daten bereitstellen. Und nun viel Spass damit,

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (1. November 2011 um 05:13)