Text Datei Editieren

  • Hallo zusammen

    Ich würde gerne via Auto-It die Datei c:\WINDOWS\system32\drivers\etc\services Editieren, bzw da zwei Zeilen anhängen, und / oder löschen. Es ist eine Text-Datei.

    Hinzufügen würde ich

    appliakationsname 10044/tcp #Applikation 1
    applikationsname2 29444/tcp #Applikation 2


    oder diese beiden eben löschen wollen / müssen.

    Wie kann man das am elegantesten Lösen? Mit Fileopen und Filewriteline? Spätestens beim entfernen der beiden Zeilen, bin ich aber komplett planlos.

    Ich hoffe ihr wisst Rat.

    2 Mal editiert, zuletzt von Surfy (23. April 2010 um 17:23)

  • 1. text !komplett! auslesen
    2. das was weg muss/soll mit StringReplace(..) rausfilttern und mit leerzeichen ersezen
    3. FileWrite(...)

    wenn das falsch ist näher erleutern pls
    Edit\\

    [autoit]


    #Include <File.au3>
    $open = FileOpen("c:\WINDOWS\system32\drivers\etc\services.txt", 0 )
    $text = FileRead($open)
    ;das was du ändern willst ( $text )
    FileClose($open)
    FileDelete("c:\WINDOWS\system32\drivers\etc\services.txt")
    _FileCreate("c:\WINDOWS\system32\drivers\etc\services.txt")
    FileWrite("c:\WINDOWS\system32\drivers\etc\services.txt",$text)
    MsgBox(0,"Fertig","Fertig geändert")
    ;nicht getestet!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    [/autoit]

    MfG
    Alizame

    4 Mal editiert, zuletzt von Alizame (22. April 2010 um 19:16)

  • [autoit]

    #include <file.au3>

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

    $Pfad = ""

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

    $file = FileOpen($Pfad, 1)
    FileWriteLine($file, "appliakationsname 10044/tcp #Applikation 1")
    FileWriteLine($file, "appliakationsname 10044/tcp #Applikation 1")
    FileClose($file)

    [/autoit]

    Zum hinzufügen.. .

    Zitat

    You just keep on trying 'till you run out of cake. ;)


    [STEAM] Source UDF

    3 Mal editiert, zuletzt von K4z (24. November 2011 um 17:16)

  • zum hinzufügen wie schon gesagt komplette file einlesen und dann

    [autoit]

    $eingeleseneDatei &= @CRLF "Dein Text" ; ohne @CRLF schreibt er in der letzten zeile weiter!!

    [/autoit]

    sonst wie schon gesagt am besten

    [autoit]

    $eingeleseneDatei = StringReplace($eingeleseneDatei, "Zu entfernen", "") ; leerer string für entfernen

    [/autoit]

    allerdings bleiben dann die absätze, das kann man aber lösen ;)

  • ;(

    Herzlichen Dank für eure Tips!

    Leider klemmt Fileopen schon daran, dass die Datei keine Endung hat..

    $file = FileOpen("c:\WINDOWS\system32\drivers\etc\services", 0)
    FileWriteLine($file, "appliakationsname 10044/tcp #Applikation 1")
    FileWriteLine($file, "appliakationsname 10044/tcp #Applikation 1")
    FileClose($file)

    läuft so ins leere... Muss ich die Datei nun vorher umbenennen? Irgendwie wird alles nicht so elegant, wie ich mir erhofft hatte

  • Hi,

    in Deinem Fall unbedingt (Mode 1) verwenden, ansonsten zerschiesst Du Dir Deine services Datei.
    Bei Änderungen an Systemdateien, empfiehlt sich eh eine Sicherung der Datei vor dem Ändern.

    ;-))
    Stefan

  • Herzlichen Dank! :rolleyes: Sass ich auf der Leitung :wacko:

    $Pfad = "c:\WINDOWS\system32\drivers\etc\services"

    $file = FileOpen($Pfad, 1)
    $ifexistos = StringInStr( $file, "appliakationsname")
    MsgBox(4096, "Test", $ifexistos, 10)


    Sieht vielleicht wo da mein Fehler liegt? Würde gern erst prüfen, ob der Eintrag schon vorhanden ist, oder nicht, bevor ich da schreibe. ;)

  • schau mal in der Hilfe nach, was fileopen() zurückgibt, bzw was dein Parameter $file bedeutet...

  • Hi,

    [autoit]


    $file = FileOpen($Pfad, 1)
    $ifexistos = FileRead ($file)
    If StringInStr( $ifexistos, "appliakationsname") Then
    MsgBox(4096, "Test", $ifexistos, 10)
    Else
    MsgBox (0,"", "nichtvorhanden -> schreib in services")
    EndIf

    [/autoit]

    ;-))
    Stefan

  • 8|

    Ich danke euch!

    Leider finden die Zeilen "appliakationsname" nicht, obwohl es mehrfach eingetragen wurde. Ich habe auch eine Abfrage eingebaut, ob es probleme beim öffnen gab.


    [autoit]

    $Pfad = "c:\WINDOWS\system32\drivers\etc\services"
    $file = FileOpen($Pfad, 1)
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf
    $ifexistos = FileRead ($file)
    If StringInStr( $ifexistos, "appliakationsname") Then
    MsgBox(4096, "Test", $ifexistos, 10)
    Else
    MsgBox (0,"", "nichtvorhanden -> schreib in services")
    EndIf

    [/autoit]

    Nun begreife ich grad gar nichts mehr, denn ein Fehler ist dabei nicht erkennbar

    Einmal editiert, zuletzt von Surfy (23. April 2010 um 13:17)

  • Argh, hab da doch noch ein paar Probleme:


    Zitat


    knetd 2053/tcp #Kerberos de-multiplexor
    man 9535/tcp #Remote Man Server

    applikation1 10044/tcp #Applikation1
    applikation2 29444/tcp #Applikation2

    Die Services Datei hat am ende korrekterweise eine Leerzeile, die mein Script dann einfach mitbenutzt :wacko:

    Und das Entfernen will gar nicht:

    [autoit]

    $Pfad = "c:\WINDOWS\system32\drivers\etc\services"
    $file = FileOpen($Pfad, 1)
    $eingeleseneDatei = StringReplace($file, "applikation1 10044/tcp #Applikation1", "") ; leerer string für entfernen
    $eingeleseneDatei2 = StringReplace($file, "applikation2 29444/tcp #Applikation2", "") ; leerer string für entfernen
    FileClose($file)

    [/autoit]
  • Ich glaube am Modi liegt das nicht alleine? Ohne Flag passiert nichts, mit 1 auch nicht, mit 2 wird die ganze Datei gelöscht


    Sitze ich heute wirklich sooo auf dem Schlauch? 8| ;(

  • [autoit]

    #include<Array.au3>
    #include <File.au3>
    $filename = "c:\WINDOWS\system32\drivers\etc\services"
    $find = "applikation1 10044/tcp #Applikation1 "
    $replace = ""

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

    $retval = _ReplaceStringInFile($filename,$find,$replace)
    $find = "applikation2 10044/tcp #Applikation2 "
    $replace = ""
    $retval = _ReplaceStringInFile($filename,$find,$replace)

    [/autoit]

    Hui, hab das selber hinbekommen :rolleyes: Jetzt stören nur noch die zurückbleibenden Leerzeilen :thumbup:

  • Ich hab jetzt etwas, was mir Leerzeilen aus dem ende einer Textdatei entfernt:

    [autoit]

    #Include <File.au3>
    $open = FileOpen("c:\WINDOWS\system32\drivers\etc\services", 0 )
    $text = FileRead($open)
    $sString = StringTrimRight($text, 2)
    FileClose($open)
    FileDelete("c:\WINDOWS\system32\drivers\etc\services")
    _FileCreate("c:\WINDOWS\system32\drivers\etc\services")
    FileWrite("c:\WINDOWS\system32\drivers\etc\services",$sString)

    [/autoit]

    Aber eleganz ist zum einen nicht gegeben, zum anderen kann ich nicht wissen, wieviele Leerzeilen ich zu entfernen habe ?(

    Ich hoffe ihr wisst noch einmal rat ;)

  • String RegExp sollte helfen. ^^ (universal mittel bei so was)

    SeuBo hat mal n Tut drüber gemacht. (Sufu)

    mfg Ubuntu