suchen und ersetzen

  • mal eine, wie ich hoffe für euch einfache, frage

    ich habe eine datei die aufschreibt wer sie ausführt
    aber möchte nicht das mein name und der name meines kumpels dort stehen wenn die datei angeschaut wird

    ich habe eine textdatei
    in der stehen lauter namen
    und wenn z.b. fabian
    oder kevin dort steht es durch ein leerzeichen ersetzt wird

    ist dies möglich??

    Einmal editiert, zuletzt von fabulous (3. Januar 2009 um 02:23)

  • also ich habe eine datei die heist test.txt

    und am ende des scriptes in meiner datei soll diese datei durchsucht werden
    aber ich sehe nirgends das eine text datei geöfnet wird

  • Du öffnest due Datei erst mit FileOpen dann ließt du sie ein mit FileRead und dann lässt du deinen und den Namen deines Kumpels mittels StringReplace ersetzen.

  • Hi,
    ich hab da was gebastelt, als mir langweilig war :).

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <ListBoxConstants.au3>
    #include <String.au3>
    #include <GuiListBox.au3>
    #include <GUIConstantsEx.au3>

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

    $MainGui = GUICreate("Ersetzen ...", 436, 324, 706, 582)
    $FileList = _GUICtrlListBox_Create($MainGui, "", 8, 48, 249, 266, $LBS_EXTENDEDSEL)
    $Description1 = GUICtrlCreateLabel("Makiere die Dateien, in denen ersetzt werden soll" & @CRLF & "(mehrere Dateien mit STRG auswählen)", 16, 8, 236, 33)
    $Inputreplaceword = GUICtrlCreateInput("", 272, 72, 153, 21)
    $Description2 = GUICtrlCreateLabel("Was soll ersetzt werden?", 272, 48, 122, 17)
    $ButtonReplace = GUICtrlCreateButton("Ersetzen", 272, 176, 155, 122, 0)
    $Inputreplacewithword = GUICtrlCreateInput('" "', 272, 144, 153, 21)
    $Description3 = GUICtrlCreateLabel("Durch was soll ersetzt werden?" & @CRLF & '(Zwischen " " schreiben!)', 272, 104, 151, 33)

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

    While 1
    $path = FileSelectFolder("Ordner mit Textdatei(en) auswählen ...", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
    If @error Then
    $msg = MsgBox(21, "Error!", "Keine Datei gewählt")
    Switch $msg
    Case 2
    Exit
    EndSwitch
    Else
    ExitLoop
    EndIf
    WEnd

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

    ProgressOn("Es wird gesucht ...", "")
    $array = _GetFilesFolder_Rekursiv($path, ".txt", 0)
    ProgressSet(100)
    Sleep(1000)
    ProgressOff()

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

    If $array[0] = 0 Then
    MsgBox(16, "Error!", "Keine Dateien gefunden!")
    Exit
    EndIf

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

    For $i = 1 To UBound($array) - 1
    _GUICtrlListBox_AddString($FileList, StringTrimLeft($array[$i], StringInStr($array[$i], "\", Default, -1)))
    Next

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

    GUISetState(@SW_SHOW, $MainGui)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonReplace
    $between = _StringBetween(GUICtrlRead($Inputreplacewithword), '"', '"')
    If @error Or (UBound($between) > 1) Or (GUICtrlRead($Inputreplaceword) = '') Then
    MsgBox(16, "Error!", "Bad formatted Replacestring!")
    Else
    $arraycount = _GUICtrlListBox_GetSelItems($FileList)
    If $arraycount[0] <> 0 Then
    For $i = 0 To UBound($arraycount) - 1
    _ReplaceStringInFile($array[$i + 1], GUICtrlRead($Inputreplaceword), $between[0])
    Next
    Else
    MsgBox(16, "Error!", "Nothing selected")
    EndIf
    EndIf
    EndSwitch
    WEnd

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================

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

    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

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

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]

    Es gibt eigentlich schon eine Funktion die das macht: _ReplaceStringInFile

  • warum so umständlich

    hab es ganz einfach gemach

    [autoit]

    HotKeySet("{ESC}", "_Terminate")

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

    Func _Terminate()
    MsgBox(0, "Schisser", "Hasst wohl Angst")
    Exit 0
    EndFunc

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

    Global $name = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer", "Logon User Name")

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

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Inis Töter", 316, 146, 347, 263)
    GUISetIcon("D:\003.ico")
    $Button1 = GUICtrlCreateButton("&OK", 65, 115, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("&Schließen mit esc", 162, 115, 100, 25, 0)
    $Label1 = GUICtrlCreateLabel("Möchtest du Wirklich das Schulsicherheitssystem auf deinem", 10, 3, 291, 17)
    $Label2 = GUICtrlCreateLabel("Computer Ausschalten?", 10, 20, 116, 17)
    $Label3 = GUICtrlCreateLabel("Wenn Ja dann melde dich ab und wieder neu an und das", 10, 43, 275, 17)
    $Label4 = GUICtrlCreateLabel("Schulsicherheitssystem ist ausgeschaltet", 10, 60, 195, 17)
    $Label5 = GUICtrlCreateLabel("Benutzung auf eigene Gefahr", 32, 88, 250, 28)
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

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

    func _Schau()

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

    ;schreibt den namen des Benutzers in die text datei
    $file = FileOpen("C:\WINDOWS\Schülerleute.txt", 1)

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

    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    Select
    Case $name = "fboetsch"
    FileWrite($file, " " & @CRLF)

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

    Case $name = "kgeheeb"
    FileWrite($file, " " & @CRLF)

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

    Case Else
    FileWrite($file, $name & @CRLF)
    EndSelect

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

    FileClose($file)
    ;hier löscht man eigentlich den ordner in der regestry,

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

    ;da ich damit aber meinen comp kaputgemacht habe (da bei mir, nicht wie in der schule nach jedem neustart alles neu ist) habe ich diese zeile lieber entfernt
    ; wer es trotzdem wissen will es war "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

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

    MsgBox(0, "Haha", "Ich merk mir deinen Namen^^")
    exit
    endfunc

    [/autoit]

    habe einfach die 2 variablen verglichen

  • warum so umständlich

    Umständlich?

    Mein Script besteht aus 1 Zeile falls du es dir angeguggt hättest.

    [autoit]

    _ReplaceStringInFile($array[$i + 1], GUICtrlRead($Inputreplaceword), $between[0])

    [/autoit]

    Das drum rum ist eigentlich unwichtig.
    Außerdem verstehe ich nicht, was bei dir bitteschön ersetzt wird?!

    Zitat von Hilfe

    Append a line of text to the end of a previously opened text file.

    [autoit]

    Case $name = "fboetsch"
    FileWrite($file, " " & @CRLF)

    [/autoit]

    Aha, du hängst also einen Leerstring an deine Datei an, das ersetzt allerdings deinen Namen nicht ...

    Und benutz bitte Spoiler für längere Quellcodes :).

    • Offizieller Beitrag

    Anno2008 hat recht, zumal du ja noch nicht mal die Datei eingelesen hast .

    Edit : Ich weiß ja nicht wie euer Schulsicherheitssystem funtioniert, aber schon mal daran gedacht , das die Benutzerdaten auch auf nen Server zusätzlch abgelegt werden ?

  • man muss auch nicht die datei einlesen

    da erst geschaut wird ob ich oder mein kumpel die datei ausführen
    und schreibt dan nur ein leerzeichen

    [autoit]

    Select
    Case $name = "fboetsch"
    FileWrite($file, " " & @CRLF)

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

    Case $name = "kgeheeb"
    FileWrite($file, " " & @CRLF)

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

    wenn jeman anderes es ausführt wird der (zuvor in der regestry gesuchte) name in die datei geschrieben

    [autoit]

    Case Else
    FileWrite($file, $name & @CRLF)
    EndSelect

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

    Raupi
    es sind 2 programme
    ein programm löscht die dateien die auf dem computer hinzugefügt wurden(nach neustart)
    aber in einem laufwerk "i" wird nichts gelösht
    dort ist meine datei

    ein anderes programm sperrt dateien wie word oder powerpoint oder internet

    und wenn man den run ordner in der regestry löscht und ab und wieder anmeldet starten diese programme nicht mehr

    • Offizieller Beitrag

    Die Frage ist nur warum du überhaupt was in die Datei schreibst , wenn du und dein Kumpel die Datei ausführen . ? Wieso willst du eine leere Zeile einfügen? Entzieht sich meiner Logic.