Betimmte Wörter in einer Datei löschen

  • Hi

    Beschäftige mich mit Autoit seit gerade mal 6 Stunden und bin überrascht wie einfach das scripten, mit Autoit ist. Das einzige was ich vorher Programmiert habe, waren die CNC-Maschienen auf meiner Arbeit.

    Mein erster Script Markiert von einer Internetseite den Text und schreibt diesen in eine Textdatei.

    Leider sieht es in dieser Datei danach sehr unordentlich aus, weil ich die ganze Seite markiere und somit auch Wörter in die Datei werfe, die ich nicht brauche.

    Jetzt zu meiner Frage.
    Ist es möglich, die Datei auszulesen und alle Wörter die ich nicht brauche, rauszulöschen.


    Und noch eine Frage zu meinem, schon bestehenden Code.

    Spoiler anzeigen
    [autoit]


    $janein =MsgBox(36, "XXX", "starten?")
    If $janein = 7 Then
    Exit
    EndIf
    $datei = InputBox("XXX", "Gib hier den Dateinamen an,in der die Daten gespeichert werden sollen", "XXX.txt", "")
    If FileExists($datei) Then
    $datei = InputBox("XXX", "Die Datei existiert schon. Gib einen anderen Dateinamen an", "XXX.txt", "")
    EndIf
    FileOpen($datei, 1)
    For $i = 5 to 1 Step -1
    WinActivate("XXX - Mozilla Firefox", "")
    WinWaitActive("XXX - Mozilla Firefox")
    Send("^a")
    Send("^c")
    FileWrite($datei, ClipGet())
    MouseMove(852, 168)
    MouseClick( "left" )
    Sleep(1000)
    Next
    FileClose($datei)

    [/autoit]

    Bei der Inputbox gibt es den Button Cancel. Aber wenn ich diesen Anklicke wird der Script trotzdem ausgeführt. Was muß da noch rein? If=?

  • du kannst dir entweder ne Liste anfertigen mit "bösen wörtern" die du nicht magst, oder du schreibst dir (oohhh^^) in Autoit ein Script , wo du nur die bösen Wörter eingeben musst, welche dann in eine .ini gespeichert werden :D

    zuerst, das bösewörterindieinischreibscript <-- rofl

    [autoit]

    ;böse Wörter! Pfui!
    $i = 0
    While 1
    $i = $i + 1
    $wort = InputBox("Böses Wort", "Bitte das böse Wort eingeben")
    if @error = 1 Then
    TrayTip("Canceled", "Canceled", 5)
    sleep(2000)
    Exit
    EndIf
    IniWrite(@ScriptDir & "\boese.ini", "wort", "wort" & $i, $wort)
    WEnd

    [/autoit]

    dann das "Echte Script":

    [autoit]

    $janein =MsgBox(36, "XXX", "starten?")
    If $janein = 7 Then
    Exit
    EndIf
    $datei = InputBox("XXX", "Gib hier den Dateinamen an,in der die Daten gespeichert werden sollen", "XXX.txt", "")
    if @error = 1 Then
    TrayTip("Canceled", "Canceled", 5)
    sleep(2000)
    Exit
    EndIf

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

    If FileExists($datei) Then
    $datei = InputBox("XXX", "Die Datei existiert schon. Gib einen anderen Dateinamen an", "XXX.txt", "")
    EndIf
    if @error = 1 Then
    TrayTip("Canceled", "Canceled", 5)
    sleep(2000)
    EndIf
    FileOpen($datei, 1)
    For $i = 5 to 1 Step -1
    WinActivate("XXX - Mozilla Firefox", "")
    WinWaitActive("XXX - Mozilla Firefox")
    Send("^a")
    Send("^c")
    FileWrite($datei, ClipGet())
    MouseMove(852, 168)
    MouseClick( "left" )
    Sleep(1000)
    Next
    FileClose($datei)

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

    ;böse Wörter! Pfui!
    $i = 0
    While 1
    $i = $i + 1
    $wort = InputBox("Böses Wort", "Bitte das böse Wort eingeben")
    if @error = 1 Then
    TrayTip("Canceled", "Canceled", 5)
    sleep(2000)
    Exit
    EndIf
    IniWrite(@ScriptDir & "\boese.ini", "wort", "wort" & $i, $wort)
    WEnd

    [/autoit]

    auch das mit der Input box wurde behoben^^

    mfg
    huggy

    Edit peethebee: Wieder mal gefühlte hundert Leerzeilen entfernt - oft mache ich das nicht mehr...

    Einmal editiert, zuletzt von peethebee (4. April 2007 um 10:18)

    • Offizieller Beitrag

    Hi!

    Aus der aktuellen Hilfe zu InputBox:

    "Return Value

    Success: Returns the string that was entered.
    Failure: Returns "" (blank string) and sets @error as follows:
    @Error 0 = The string returned is valid.
    1 = The Cancel button was pushed.
    2 = The Timeout time was reached.
    3 = The InputBox failed to open. This is usually caused by bad arguments."

    [autoit]

    If MsgBox(36, "XXX", "starten?") = 7 Then Exit
    $datei = InputBox("XXX", "Gib hier den Dateinamen an,in der die Daten gespeichert werden sollen", "XXX.txt", "")
    While FileExists($datei)
    $datei = InputBox("XXX", "Die Datei existiert schon. Gib einen anderen Dateinamen an", "XXX.txt", "")
    If @error = 1 Then Exit ; Abbrechen gedrückt
    WEnd
    FileOpen($datei, 1)
    For $i = 5 to 1 Step -1
    WinActivate("XXX - Mozilla Firefox", "")
    WinWaitActive("XXX - Mozilla Firefox")
    Send("^a")
    Send("^c")
    $text = ClipGet()
    $text = StringReplace($text, "<HTML>", "") ; ersetzen
    FileWrite($datei, $text)
    MouseMove(852, 168)
    MouseClick( "left" ) ; geht hier evtl. ControlClick? Wäre wesentlich besser...
    Sleep(1000)
    Next
    FileClose($datei)

    [/autoit]

    Habe mal die Überprüfung auf Dateinamen verbessert (fragt jetzt solange, bis man Abbrechen drückt oder die Datei nicht exisitiert). Evtl. könnte man die Dateiauswahl mit FileOpenDialog realisieren...

    Happy Coding,
    peethebee


  • das wollt ich schon immer mal sagen:


    ERSTER :D

    Einmal editiert, zuletzt von peethebee (4. April 2007 um 10:18)

  • Hi

    So danke erst mal für die Tips. Echt super Forum :klatschen:

    Klappt soweit alles super. Bis auf das Problem, dass ich immer nur ein Wort löschen kann. Ich weiss also nicht wie ich meinem Script beibringe, das es in der config.ini alle Wörter abarbeiten soll.


    Script:

    Spoiler anzeigen
    [autoit]


    If MsgBox(36, "XXX", "starten?") = 7 Then Exit
    $datei = InputBox("XXX", "Gib hier den Dateinamen an,in der die Daten gespeichert werden sollen", "XXX.txt", "")
    While FileExists($datei)
    $datei = InputBox("XXX", "Die Datei existiert schon. Gib einen anderen Dateinamen an", "XXX.txt", "")
    If @error = 1 Then Exit
    WEnd
    FileOpen($datei, 1)
    Sleep(1000)
    For $i = 5 to 1 Step -1
    Send("^a")
    Send("^c")
    $text = ClipGet()
    $i = 0
    While 1
    $i = $i + 1 ;hier macht er, glaube ich, eine Endlosschleife
    $del = IniRead(@ScriptDir & "\config.ini", "del", "key", "")
    WEnd
    $text = StringReplace($text, $del, "")
    FileWrite($datei, $text)
    MouseMove(852, 168)
    MouseClick( "left" )
    Sleep(1000)
    Next
    FileClose($datei)

    [/autoit]

    config.ini:

    Spoiler anzeigen
    [autoit]


    [del]
    key=wort1
    key=wort2 ;nochmal den selben schlüssel geht glaube ich eh nicht :)
    key=wort3 ;aber wie mach ich das key1 oder key[1] ??

    [/autoit]
  • in deiner version liest er immer und immer wieder den Wert von "key".
    Den löscht er ja, bzw er existiert nichtmehr!

    Benutz doch mein Script, oder mach es selber, es sollte in diesem Format aber sein:


    [Wörter]
    wort1=du
    wort2=ich


    jetzt kannst du dem programm sagen, es soll wert 1, wert2, wert3 lesen (wort1,wort2,wort3) , wie in meinem Beispiel!

  • Also momentan hab ich es so gelöst.

    Spoiler anzeigen
    [autoit]


    $datei = InputBox("XXX", "Gib hier den Dateinamen an,in der die Daten gespeichert werden sollen", "Galaxie.txt", "")
    If @error = 1 Then Exit
    While FileExists($datei)
    $datei = InputBox("XXX", "Die Datei existiert schon. Gib einen anderen Dateinamen an", "GalaxieX.txt", "")
    If @error = 1 Then Exit
    WEnd
    If MsgBox(262180, "XXX", "Der Scann dauert ca. 15min. Starten?") = 7 Then Exit
    If MsgBox(262180, "XXX4", "Maximiere Firefox und öffne die XXX.") = 7 Then Exit
    HotKeySet("{Esc}", "captureEsc")
    Func captureEsc()
    If MsgBox(262180, "XXX", "Es wurden noch nicht alle Daten gespeichert. Scann fortsetzten?") = 7 Then Exit
    EndFunc
    FileOpen($datei, 1)
    Sleep(1000)
    MouseMove(852, 200)
    MouseClick( "left" )
    For $i = 499 to 1 Step -1
    Send("^a")
    Send("^c")
    $text = ClipGet()
    $text = StringReplace($text, "spionieren", "")
    $text = StringReplace($text, "allianzseite", "")
    $text = StringReplace($text, "Galaxie", "")
    $text = StringReplace($text, "Sonnensystem", "")
    $text = StringReplace($text, "(Aktivität)", "")
    $text = StringReplace($text, "(Status)", "")
    $text = StringReplace($text, "Aktionen", "")
    $text = StringReplace($text, "Nachricht", "")
    $text = StringReplace($text, "schreiben", "")
    $text = StringReplace($text, "Buddyanfrage", "")
    $text = StringReplace($text, "Planeten", "")
    $text = StringReplace($text, "besiedelt)", "")
    $text = StringReplace($text, "Legende", "")
    $text = StringReplace($text, "Recycler", "")
    $text = StringReplace($text, "Slot(s)", "")
    $text = StringReplace($text, "Benutzung", "")
    $text = StringReplace($text, "Recycler", "")
    $text = StringReplace($text, "Starker", "")
    $text = StringReplace($text, "Spieler", "")
    $text = StringReplace($text, "Schwacher", "")
    $text = StringReplace($text, "Urlaubsmodus", "")
    $text = StringReplace($text, "Gesperrt", "")
    $text = StringReplace($text, "Tage", "")
    $text = StringReplace($text, "Inaktiv", "")
    $text = StringReplace($text, "Angreifen", "")
    $text = StringReplace($text, "Halten", "")
    $text = StringReplace($text, "Transport", "")
    $text = StringReplace($text, "Statistiken", "")
    $text = StringReplace($text, "Allianzhomepage", "")
    $text = StringReplace($text, "Eigenschaften", "")
    $text = StringReplace($text, "Zerstören", "")
    $text = StringReplace($text, "Trümmerfeld", "")
    $text = StringReplace($text, "Ressourcen:", "")
    $text = StringReplace($text, "Metall:", "")
    $text = StringReplace($text, "Kristall:", "")
    $text = StringReplace($text, "Abbau", "")
    $text = StringReplace($text, "Größe:", "")
    $text = StringReplace($text, "Temp:", "")
    FileWrite($datei, $text)
    MouseMove(852, 168)
    MouseClick( "left" )
    Sleep(1000)
    Next
    FileClose($datei)
    If MsgBox(64, "XXX", "Scann Abgeschlossen.") = 1 Then Exit

    [/autoit]


    Zitat

    in deiner version liest er immer und immer wieder den Wert von "key".

    Ja das war mir klar, dass er dann immer nur den ersten Schlüssel nimmt. Aber wie kann ich sagen. Arbeite dich so lange durch, bis kein neuer Schlüssel mehr da ist und beende dann die Schleife. Also wenn ich jetzt 4 Schlüssel habe (key1, key2, key3, key4) soll er nach dem 4. key aufhören und weitermachen mit dem Script. Aber wenn ich jetzt später in die .ini noch keys hinzufüge (key5, key6) soll er die dann auch abareiten.

    Zitat

    Benutz doch mein Script, oder mach es selber, es sollte in diesem Format aber sein:

    Dein Böse Wörter Script schreibt ja nur die Wörter in die .ini . Oder verstehe ich da jetzt was falsch.

    Zitat

    welche Seite ist es denn? Ich denke mal, es wäre schöner wenn du einfach nur den Text extrahierst, den du auch wirklich haben willst.

    Es ist ein Browsergame und da ich nicht weiss ob ich das da so machen darf, nenn ich jetzt mal nicht den Namen ;) Aber man kann es sich vielleicht schon denken.

    Zitat

    Mit ie.au3 kannst du sowas auch im Hintergrund laufen lassen.

    Ok das hört sich ja gut an. Aber da muß ich erst mal schauen was die ie.au3 ist und wie man das macht. Höre ich jetzt nähmlich zum ersten mal.

  • 1) Mit ner FOR schleife kannst du 1 bis 10000 (in meinen beispiel glaub ich so gelöst) mal die Schleife machen lassen, kannst natürlich auch von 1 bis $zahl laufen lassen..musst halt komplizierter lösen, wenn dich das interessiert guck dir das tutorial (link steht links) an.

    Mein 2es script schreibt nur was in die Ini - ja, aber so wie du es gelöst hast mit

    [del]
    key=0
    key=1


    ist es so unbrauchbar wie nur.

    Ich weiß nicht was am beispielscript unverständlich ist und dein problem versteh ich auch nicht so...

    Wofür das Script is kann man sich wohl denken, aber das is ein anderes thema..