Nur bestimmte Textstelle in Zeile ändern

  • ich glaube das sind deine freunde:
    http://www.autoitscript.com/autoit3/docs/f…ileReadLine.htm
    http://www.autoitscript.com/autoit3/docs/f…ringReplace.htm


    Hier die Lösung...
    Über Sinnhaftigkeit des Ganzen lässt sich streiten:

    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTab.au3>
    #include <File.au3>
    #include <array.au3>

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

    $Form1 = GUICreate("Form1", 314, 254, -1, -1)
    $Altes_PW = GUICtrlCreateInput("", 50, 40, 200, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
    $Neues_PW = GUICtrlCreateInput("", 50, 104, 200, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
    $Neues_PW_WDH = GUICtrlCreateInput("", 50, 160, 200, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
    $Button1 = GUICtrlCreateButton("Passwort ändern", 50, 208, 200, 25, 0)
    $Altes_Passwort = GUICtrlCreateLabel("Altes Passwort:", 50, 16, 76, 17)
    $Neues_Passwort = GUICtrlCreateLabel("Neues Passwort:", 50, 80, 84, 17)
    $Neues_Passwort_Wiederholen = GUICtrlCreateLabel("Neues Passwort wiederholen:", 50, 136, 144, 17)
    GUISetState(@SW_SHOW)

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

    $Nutzer = "Jan" ; Ändert sich immer durch einen input

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    _PW()
    EndSwitch
    WEnd

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

    Func _PW()
    $Zaehlen = _FileCountLines(@ScriptDir & "\Test.txt")
    For $i = 4 To $Zaehlen
    $Zeile = FileReadLine(@ScriptDir & "\Test.txt", $i)
    If StringInStr($Zeile, $Nutzer) Then
    $PasswortZeile = FileReadLine(@ScriptDir & "\Test.txt", $i)
    $Passwortdatei = StringSplit($PasswortZeile, " = ", 1)
    $PW = $Passwortdatei[3]
    $1 = GUICtrlRead($Altes_PW)
    $2 = GUICtrlRead($Neues_PW)
    $3 = GUICtrlRead($Neues_PW_WDH)
    if $2 <> $3 Then MsgBox(0, "Fehler", "Die Wiederholung des neuen Passwortes ist falsch")
    if $1 = $Passwortdatei[2] Then
    $read = FileRead(@ScriptDir & "\Test.txt")
    $read = StringReplace($read, $Nutzer&" = "&$1&" = ", $Nutzer&" = "&$2&" = ")
    FileDelete(@ScriptDir & "\Test.txt")
    $ret = FileWrite(@ScriptDir & "\Test.txt", $read)
    if $ret = 1 MsgBox(0, "OK", "Neues Passwort wurde gesetzt")
    Else
    MsgBox(0, "Fehler", "Das alte Passwort wurde falsch eingegeben")
    EndIf
    Return
    EndIf
    Next
    Return ""
    EndFunc

    [/autoit]

    3 Mal editiert, zuletzt von WhiteLion (3. April 2013 um 09:38)

  • bitte.... bedenke allerdings, dass dieses keines falls eine ideallösung ist.... die passwortdatay wird jedes mal neu geschrieben.
    das liegt hauptsächlich daran wie du an die sache rangegangen bist ... du solltest bei ini dateien einfach mit iniread / iniwrite arbeiten.
    das macht es nicht nur einfacher, sondern auch schneller, wenn die datei größer ist.