Text in Datei ersetzen ...

  • Hallo Leute,

    ich versuche gerade ein Script zu schreiben, welches mir in einer Datei (*.ini) einen bestimmten String ersetzen kann. Der String kann unter Umständen mehrmals vorkommen.

    Das Ganze soll ohne Interaktion durch einen Benutzer funktionieren und am besten so, dass man nicht sieht, wie das alles von statten geht, also kein Notepad öffnen etc.

    Ich habe dazu ein hier im Forum gefundenes Script genommen und ein wenig angepasst. Das Problem ist aber, dass der inhalt der Datei völlig gekillt wird, die Datei ist danach also leer. Was ist alles an dem Script falsch?

    [autoit]

    ;Dateipfad zur bearbeitenden Datei angeben
    $TxtDateiPfad = 'D:\test\datei.ini'

    ;Datei auslesen
    $FileHandle = FileOpen($TxtDateiPfad, 1)
    $Text = FileRead($FileHandle)

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


    ;Zeichen ersetzen
    $string = StringReplace ("Text der ersetzt werden soll", "soll", "muss")

    ;Datei speichern
    $FileHandle = FileOpen($TxtDateiPfad, 2)
    FileWrite($FileHandle, $Text)
    FileClose($FileHandle)

    [/autoit]
  • Dank dir BugFix, ein sehr guter Hinweis!

    Das Script ist super simpel sieht jetzt folgendermaßen aus ...

    [autoit]

    #NoTrayIcon

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

    $string = IniWrite("d:\test\notes.ini", "Notes", "NotesProgram", "C:\Lotus\Domino7";)

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

    $string = IniWrite("d:\test\notes.ini", "Notes", "Directory", "F:\Lotus\Domino\Data";)

    [/autoit]


    Wie kann ich das Thema auf [gelöst] setzen?

    Edit Mega: erledigt.

    Einmal editiert, zuletzt von pauLee (25. Juli 2007 um 13:49)

  • Zitat

    Original von Xenobiologist
    Hi,

    das $string kannst du dir sparen. IniWrite liefert eine 1 zurück wenn es geklappt hat. Könntest also If Not IniWrite ... Then msgbox ..Fehler xyz machen.

    So long,

    Mega


    kannst du das bitte etwas präzisieren?

    • Offizieller Beitrag

    HI,

    [autoit]

    Global $iniPath = 'd:\test\notes.ini'
    If Not IniWrite($iniPath, "Notes", "NotesProgram", "C:\Lotus\Domino7") Then MsgBox(16, 'Fehler', 'Fehler beim Schreiben von NotesProgram!', 5)
    If Not IniWrite($iniPath, "Notes", "Directory", "F:\Lotus\Domino\Data") Then MsgBox(16, 'Fehler', 'Fehler beim Schreiben von Directory!', 5)

    [/autoit]

    So long,

    Mega

  • DANKE!!


    edit: Ich muss ein wenig zurückrudern - es kommt keine MsgBox, wenn der Parameter nicht gefunden wird!?

    Einmal editiert, zuletzt von pauLee (25. Juli 2007 um 15:05)

  • Ahso, das hab ich übersehen, die ini ist einfach zu groß :tier:

    Ich dachte, der Fehler kommt, wenn der Eintrag nicht gefunden wurde.

  • Ich habs jetzt folgendermaßen probiert ... was aber nicht zum Erfolg führt.

    [autoit]

    #NoTrayIcon

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

    Global $iniPath = 'd:\test\notes.ini'

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

    If IniRead ($iniPath "Notes", "NotesProgram", "C:\Lotus\Domino6") Then
    IniWrite ($iniPath, "Notes", "NotesProgram", "C:\Lotus\Domino7") Else
    MsgBox(16, 'Fehler', 'Fehler beim Schreiben von NotesProgram!', 10)
    EndIf

    [/autoit]
  • Moin!

    In Deinem Skript ist die Syntax sehr schief. Und bei IniRead hast Du den Default-Return auf "C:\Lotus\Domino6" gesetzt. Ich weiß nicht, ob ich´s richtig verstanden hab, worauf Du hinaus willst, aber das hier sollte schon ein Schritt in die richtige Richtung sein.

    [autoit]

    #NoTrayIcon

    Global $iniPath = 'd:\test\notes.ini'

    If IniRead ($iniPath, "Notes", "NotesProgram", "Fehler") <> "Fehler" Then
    IniWrite ($iniPath, "Notes", "NotesProgram", "C:\Lotus\Domino7")
    Else
    MsgBox(16, 'Fehler', 'Fehler beim Schreiben von NotesProgram!', 10)
    EndIf

    [/autoit]

    Jetzt wird geprüft, ob der Key "NotesProgram" in der Section "Notes" besteht. Fehlt der Key, weil nicht eingetragen oder ini nicht vorhanden, dann kommt die MsgBox. Ansonsten wird der neue Key-Wert geschrieben.

    Bei den Fehlermeldungen, zumindest in SciTe, kannst Du relativ gut erkennen, warum er das Programm nicht laufen lässt. Mit ein wenig Übung und der Hilfe kriegt man dann schon schnell was hin.

    Hoffe, das hilft.

  • Danke für die Hilfe, jetzt habe ichs aber wirklich gelöst. Script sieht jetzt folgendermaßen aus und funktioniert sehr gut.

    [autoit]

    #NoTrayIcon


    If FileExists("c:\temp\notes.old") Then

    Else
    MsgBox(16,"Fehler", "Die notes.ini wurde in c:\temp\ nicht gefunden."& @CRLF &""& @CRLF &"Das Fenster schließt sich in 5 Sekunden.", 5)
    FileWrite("c:\temp\ERROR_notes.ini.txt", "Die notes.ini wurde in c:\temp\ nicht gefunden." & @CRLF & "" & @CRLF & "")
    Exit
    EndIf

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

    Global $iniPath = 'c:\temp\notes.old'

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

    If IniRead ($iniPath, "Notes", "NotesProgram", "Fehler1") <> "Fehler1" Then
    IniWrite ($iniPath, "Notes", "NotesProgram", "C:\Lotus\Domino")
    Else
    MsgBox(16, 'Fehler', "Der Parameter ""NotesProgram"" wurde" & @CRLF & "in der notes.ini nicht gefunden." & @CRLF &""& @CRLF &"Das Fenster schließt sich in 5 Sekunden.", 5)
    FileWrite("c:\temp\ERROR_notes.ini.txt", "Der Parameter ""NotesProgram"" wurde in der notes.ini nicht gefunden." & @CRLF & "" & @CRLF & "")
    Exit
    EndIf

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

    If IniRead ($iniPath, "Notes", "Directory", "Fehler2") <> "Fehler2" Then
    IniWrite ($iniPath, "Notes", "Directory", "F:\Lotus\Domino\Data")
    Else
    MsgBox(16, 'Fehler', "Der Parameter ""Directory"" wurde" & @CRLF & "in der notes.ini nicht gefunden." & @CRLF &""& @CRLF &"Das Fenster schließt sich in 5 Sekunden.", 5)
    FileWrite("c:\temp\ERROR_notes.ini.txt", "Der Parameter ""Directory"" wurde in der notes.ini nicht gefunden." & @CRLF & "" & @CRLF & "")
    Exit
    EndIf

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

    If IniRead ($iniPath, "Notes", "ServiceName", "Fehler3") <> "Fehler3" Then
    IniWrite ($iniPath, "Notes", "ServiceName", "Lotus Domino Server (LotusDominoData)")
    Else
    MsgBox(16, 'Fehler', "Der Parameter ""ServiceName"" wurde" & @CRLF & "in der notes.ini nicht gefunden." & @CRLF &""& @CRLF &"Das Fenster schließt sich in 5 Sekunden.", 5)
    FileWrite("c:\temp\ERROR_notes.ini.txt", "Der Parameter ""ServiceName"" wurde in der notes.ini nicht gefunden." & @CRLF & "" & @CRLF & "")
    Exit
    EndIf

    [/autoit]
  • Nach einem WriteLog hatte ich geschaut aber ich hatte es nicht gefunden.

    An ein Array hatte ich auch schon gedacht aber da fehlt mir das nötige Wissen dazu. Willst du mir kurz auf die Sprünge helfen? ;)