Komplette Zeile aus Textdatei löschen

  • Nabend, ich hab ma wieder ne kleine Frage ^^
    wie kann ich eine Zeile aus einer textdatei löschen?
    in der Textdatei:

    Code
    Server1 ; IP 1
     Server 2 ; IP 2 <-- Zeile die komplett gelöscht werden soll
     Server 3 ; IP 3
     ...


    am ende sollte das dann so aussehn:

    Code
    Server1 ; IP 1
     Server 3 ; IP 3
     ...

    Hoffe jemand versteht was ich möchte und kann helfen :P

    Einmal editiert, zuletzt von Tsume (29. Februar 2008 um 23:03)

  • wenn du weißt auf wie viele stellen das geschehen soll,dann:

    winactivate("...txt-editor")

    $delete = 12; (halt eine zahl)

    while $delete > 0

    Send ("{DEL}")

    $delete= $delete - 1

    Wend


    aber warum hast du --->wieder<---- ne frage. das ist doch dein erster beitrag^^

    greetz

    • Offizieller Beitrag

    Hi!

    Ich würde die Datei mit _FileReadToArray einlesen, dann die ArrayElemente mit _ArrayDelete löschen und dann mit _FileWriteFromArray zurückschreiben (Performance von _ArrayDelete ist bei großen Arrays schlecht, dann müsste man evtl. die Elemente, die man behalten will in ein zweites Array übernehmen und dann das in die Datei schreiben).

    peethebee

  • Vielleicht genügt auch schon ein einfacher StringReplace, wenn es nicht so viel ist ...

    Spoiler anzeigen
    [autoit]

    $sRepl = @LF & 'Server 2 ; IP 2' & @CR
    $fhText = FileOpen('Text', 0)
    $sText = FileRead($fhText)
    $sNewText = StringReplace($sText, $sRepl)
    FileWrite(@ScriptDir & '\TextNeu.txt', $sNewText)
    FileClose($fhText)

    [/autoit]

    Gruß
    Greenhorn


  • so, da ich gerad das mit stringreplace und arrayzeug nich hinkrieg post ich erstma mein ganzes skript :P

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <File.au3>
    #include <String.au3>
    #Include <GuiListView.au3>
    #include <Array.au3>

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

    $ini_realm_dir = @ScriptDir&"\Data\settings.txt"
    $wtf = @ScriptDir&"\realmlist.wtf"

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

    ;im WoW Ordner
    ;If not FileExists("WoW.exe") Then
    ; MsgBox(48 , "Fehler" , "Bitte die exe in den WoW Ordner kopieren!")
    ; Exit
    ;EndIf

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

    ;config ob da oder nich, wird dann erstellt
    If FileExists($ini_realm_dir) = 0 Then
    _FileCreate($ini_realm_dir)
    FileSetAttrib($ini_realm_dir,"+H")
    FileWrite($ini_realm_dir,"Blackrock Revolution;Blackrock-Revolution.de"&@CRLF)
    EndIf

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

    #Region ### START Koda GUI section ###
    $Form1_1 = GUICreate("RealmChanger", 409, 262, 200, 125)
    $ServerList = GUICtrlCreateListView("Name | IP" , 80, 32, 321, 188)
    _GUICtrlListView_SetColumnWidth ($ServerList, 0, 217)
    _GUICtrlListView_SetColumnWidth ($ServerList, 1, 100)
    loadserverlist()
    $but_add = GUICtrlCreateButton("Add", 8, 232, 65, 20, 0)
    $Name = GUICtrlCreateInput("Name", 80, 232, 214, 21)
    $IP = GUICtrlCreateInput("IP", 300, 232, 100, 21)
    $lbl_test = GUICtrlCreateLabel("Realm set to:", 8, 8, 66, 17)
    $but_delete = GUICtrlCreateButton("Delete", 8, 192, 65, 17, 0)
    $but_set = GUICtrlCreateButton("Set", 8, 152, 65, 17, 0)
    $lbl_selected = GUICtrlCreateLabel("", 80, 8, 321, 17)
    current_wtf()
    $but_wdb = GUICtrlCreateButton("WDB leeren", 8, 36, 65, 17, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;wtf auslesen xD und serverip in string speichern um anzeigen zu lassen
    func current_wtf()
    $open_wtf = FileOpen(@ScriptDir&"\realmlist.wtf",0)
    FileRead($open_wtf,14)
    $selected_realm = FileRead($open_wtf,2555)
    FileClose($open_wtf)
    GUICtrlSetData($lbl_selected,$selected_realm)
    EndFunc

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

    func loadserverlist()
    GUIctrldelete($ServerList)
    $ServerList = GUICtrlCreateListView("Name | IP" , 80, 32, 321, 188)
    _GUICtrlListView_SetColumnWidth ($ServerList, 0, 217)
    _GUICtrlListView_SetColumnWidth ($ServerList, 1, 100)
    $line = 1
    While 1
    $read = FileReadLine($ini_realm_dir,$line)
    If @error = -1 Then ExitLoop
    $fill = ""
    $line = $line + 1
    $split = StringSplit($read,";")
    For $n = 1 to 2
    $fill = $fill & $split[$n] & "|"
    Next
    GUICtrlCreateListViewItem($fill,$ServerList)
    WEnd
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $but_add
    $blaaaaaa = 0
    $str_name = GUICtrlRead($Name)
    $str_ip = GUICtrlRead($IP)
    If $str_name = "" or $str_name = "Name" Then
    MsgBox(48, "Error", "Bitte Namen eingeben")
    $blaaaaaa = 1
    EndIf
    If $str_ip = "" or $str_ip = "IP" Then
    MsgBox(48, "Error", "Bitte IP eingeben")
    $blaaaaaa = 1
    EndIf
    If $blaaaaaa = 0 Then
    FileWrite($ini_realm_dir,$str_name&";"&$str_ip&@CRLF)
    MsgBox(64,"Erfolg", "Server gespeichert!")
    loadserverlist()
    EndIf

    Case $GUI_EVENT_CLOSE
    Exit

    Case $but_set
    $list_selected = _GUICtrlListView_GetNextItem($ServerList)
    $selected = _GUICtrlListView_GetItemText($ServerList,$list_selected, 1)
    _FileWriteToLine($wtf,1,"set realmlist "&$selected,1)
    current_wtf()
    MsgBox(64,"Fertig","realmlist geändert!")


    Case $but_wdb
    $result = DirRemove(@ScriptDir&"\Cache\WDB\", 1)
    If $result = 1 Then
    MsgBox(64 , "Erfolg" , "WDB Ordner wurde erfolgreich gelöscht!" )
    Else
    MsgBox(64 , "Fehler" , "Der Ordner konnte nicht gelöscht werden" & @CRLF & "Möglicherweise ist er schon leer" )
    EndIf

    Case $but_delete
    If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(292,"Bestätigung","Server wirklich aus der Liste löschen?")
    Select
    Case $iMsgBoxAnswer = 6 ;Yes

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

    ;hier müsste dann dieses zeug von wegen löschen hin :/

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

    loadserverlist()
    EndSelect

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

    EndSwitch
    WEnd

    [/autoit]

    ja, is nich gerad das sauberste und schönste, aber ich kapiers und bis auf den punkt mit dem löschen geht auch alles soweit ich weiß.
    Hoffe jemand kann mir gerad ma einfach den löschen abschnitt so schreiben das es geht und ich lern dann daraus ^^

    (ach ja, >wieder< ne frage weil ich vorher in shoutbox gefragt hab)

  • die settings.txt soll eigentlich erstellt werden wenn nich vorhaden und is von dem script, NICHT von wow ^^

    ach ja xD sry, das hab ich aus versehn rausgenommen -.- : ich mein das löschen, was im ListView ausgewählt wurde dann aus der text löschen, also wenn das 3te angewählt ist dann aus der text die 3te zeile löschen. dann auch das "enter" damit die 4te in die 3te rutscht und das programm nicht abstürzt :P

  • Zitat

    die settings.txt soll eigentlich erstellt werden wenn nich vorhaden und is von dem script, NICHT von wow


    Dann speicher deine Werte doch einfach in eine settings.ini ! ;)
    Die kannst Du viel besser handlen als eine .txt, da kannst Du dann nach Herzenslust löschen, ändern, neu erstellen ...

    Code
    [Server_1]
    	IP=127.000.000.1
    [Server_2]
    	IP=192.168.000.1
    [Server_3]
    	IP=85.214.34.170

    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (29. Februar 2008 um 15:50)

  • hmm, k. das problem: ich wüsste jetzt auch nich genau wie ich das als ini machen soll, darum hab ich das gerad als txt :P

  • also die jetzige settings.txt sieht dann von so aus:

    Code
    Blackrock Revolution;Blackrock-Revolution.de
    Server 2;IP 2
    noch nen Server;123.4.5.678
    ka;ka

    Halt pro zeile Name + IP ...

  • süß nen wow realmist changer ich hab mal vor nem jahr einen gemacht. ICh poste mal den Source^^. Aber da konnte ich ncht so gut autoit naja hier der Source:^^

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GuiList.au3>

    ;==> Realmlist
    $File1 = FileOpen("Files\Path.ini",0)
    $File2 = FileReadLine($File1, 4)
    $File3 = FileOpen($File2,0)
    $File4 = FileReadLine($File3, 1)
    ;==> WoW.exe
    $File5 = FileReadLine($File1, 2)
    ;==> Manuelle Realmliste
    $Listeoeffnen = FileOpen("Files\Liste.ini",0)
    $Liste = FileRead($Listeoeffnen)
    ;==> GUI Buttons...
    $GUI = GUICreate("WoW Realmlist Changer", 416, 208)
    GuiSetBkColor(0x0)
    $GroupRealmlist = GUICtrlCreateGroup("Realmlists", 8, 8, 305, 185)
    $Aktuelle = GUICtrlCreateLabel("Aktuelle Realmlist:", 110,25,180,20)
    $Color = FileOpen("Files\Color.ini",0)
    $ColorGet = FileReadLine($Color, 2)
    GuiSetBkColor($ColorGet)
    GUICtrlSetColor($Aktuelle,0x0046D5)
    $Realms = GUICtrlCreateLabel("Verfügbare Realms:", 110,85,180,20)
    GUICtrlSetColor($Realms,0x0046D5)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Start = GUICtrlCreateButton("Start", 328, 24, 73, 33,0)
    GuiCtrlSetBkColor(-1,$ColorGet)
    $Selecting = GUICtrlCreateButton("Select", 328, 64, 73, 33, 0)
    GuiCtrlSetBkColor(-1,$ColorGet)
    $Exit = GUICtrlCreateButton("Exit", 328, 144, 73, 33, 0)
    GuiCtrlSetBkColor(-1,$ColorGet)
    $About = GUICtrlCreateButton("About", 328, 104, 73, 33, 0)
    GuiCtrlSetBkColor(-1,$ColorGet)
    $Group2 = GUICtrlCreateGroup("Menü", 320, 8, 89, 185)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $AktuelleRealmlist = GUICtrlCreateInput($File4, 16, 40, 281, 21)
    GUICtrlSetState ($AktuelleRealmlist, $GUI_DISABLE)
    ;==> GUI Select..
    $WoWListe = GuiCtrlCreateList("", 16, 100, 281, 90)
    GuiCtrlSetData($WoWListe, $Liste)
    GUISetState(@SW_SHOW)

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Exit
    Exit
    Case $About
    Call ("About")
    Case $Start
    Call ("Start")
    Case $Selecting
    Call ("Selecting")
    EndSwitch
    WEnd

    ;==> Funtkionen
    Func About()
    MsgBox(0,"WoW Realmlist Changer","Created by I3iLLiG." & @Crlf & @Crlf & "i3illig@gmail.com.")
    EndFunc

    Func Start()
    Run($File5)
    ToolTip("Have Fun")
    Sleep(2000)
    Exit
    EndFunc

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

    Func Selecting()
    $ret = _GUICtrlListGetSelItemsText ($WoWListe)
    If (Not IsArray($ret)) Then
    MsgBox(16, "Error", "Maybe nothing selected.")
    Else
    For $i = 1 To $ret[0]
    FileOpen($File2,2)
    FileWrite($File2,$ret[$i])
    ;MsgBox(0,"WoW Realmlist Changer", "Realmlist erfolgreich geändert.")
    GuiCtrlDelete($AktuelleRealmlist)
    $File3 = FileOpen($File2,0)
    $File4 = FileReadLine($File3, 1)
    GUICtrlCreateInput($File4, 16, 40, 281, 21)
    GUICtrlSetState (-1, $GUI_DISABLE)
    Next
    EndIf
    EndFunc

    [/autoit]

    Man brauch im UnterOrnder "Files" einige Dateien (kann man aus dem source code lesen) aber hier nochmal alles inner rar datei.

  • @I3iLLiG: bei deinem kann man aber soweit ich das sehe keine Server über das Prog hinzufügen / löschen sondern muss dies über die ini manuell machen...?!
    zudem ist es auch nur ne guictrlList und nicht ListView, da man wie ich das habe 2 werte pro server hat (<-- weiß nich ob das so viel anderes ist mit ini-Eintrag)

  • z.B. ...

    Code
    [Blackrock Revolution]
    	DNS=Blackrock-Revolution.de
    	Server1=127.000.000.1
    	Server2=192.168.000.1

    Deine *.ini kannst Du frei gestalten, so wie's dir passt ...

    Du musst dir eine Struktur ausdenken ...

    Gruß


  • hey, THX! ^^ ich habs jetz endlich mit ini hinbekommen ;) hab mir in den hilfescripts ma das mit inireadsection und dieser for-Schleife und so :P

    • Offizieller Beitrag

    Hi,

    ich habe das mal für jemanden geschrieben. Da habe ich einfach die einzelnen Dateien mit den unterschiedlichen Server abgespeichert.
    Und wenn wann dann einen Server starten wollte, dann wurde die Datei einfach über die "Original" drüber kopiert fertig.

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    #include<StaticConstants.au3>
    #include<WindowsConstants.au3>
    ; WOW Serververwaltung
    Opt("TrayIconHide", 1)
    Opt("GUICloseOnESC", 1)

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

    FileInstall('C:\Downloads\AutoIt-Skripte\WOW_bg.bmp', @TempDir & '\wow_bg.bmp', 1)
    FileInstall('C:\Downloads\AutoIt-Skripte\1.gif', @TempDir & '\1.gif', 1)
    FileInstall('C:\Downloads\AutoIt-Skripte\2.gif', @TempDir & '\2.gif', 1)
    FileInstall('C:\Downloads\AutoIt-Skripte\3.gif', @TempDir & '\3.gif', 1)

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

    GUICreate("Martin Schreiber WOW Serververwaltung", 346, 266, @DesktopWidth/2-170, @DesktopHeight/2-130, $WS_POPUP)
    GUICtrlCreatePic(@TempDir & '\wow_bg.bmp', 0, 0, 346, 266)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $nexis_B = GUICtrlCreatePic(@TempDir & '\1.gif', 16, 32, 303, 45, $SS_NOTIFY)
    $server2_B = GUICtrlCreatePic(@TempDir & '\2.gif', 16, 102, 303, 45, $SS_NOTIFY)
    $ilidan_B = GUICtrlCreatePic(@TempDir & '\3.gif', 16, 172, 303, 45, $SS_NOTIFY)
    GUISetState(@SW_SHOW)

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

    ; reamllist.wtf, reamllist_1.wtf, reamllist_2.wtf, reamllist_3.wtf

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

    Global $voice = ObjCreate("Sapi.SpVoice")

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

    Speak('Welcome to World of Warcraft - Serverstarrter by XXX ', 2.5, 100)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $nexis_B
    _perpareServer(1)
    Case $server2_B
    _perpareServer(2)
    Case $ilidan_B
    _perpareServer(3)
    EndSwitch
    WEnd

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

    Func _perpareServer($parameter)
    ; exe Datei in den WOW Ordner
    Local $server_A[4] = ['4', 'Nexis', 'W o W', 'Ilidan']
    If FileCopy(@ScriptDir & '\Server\reamlist' & $parameter & '.wtf', @ScriptDir & '\reamlist.wtf', 1) = 0 Then
    ;Speak('Copy failed!!!', 1, 100)
    ;Return -1
    EndIf
    Speak('World of Warcraft server prepared!', 1, 100)
    Sleep(300)
    Speak('Server ' & $server_A[$parameter] & ' chosen!', 1, 100)
    EndFunc ;==>_perpareServer

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

    Func Speak($Text, $Rate, $Vol)
    $voice.Rate = $Rate
    $voice.Volume = $Vol
    $voice.Speak ($Text)
    EndFunc ;==>Speak

    [/autoit]

    Mega