Einfaches suchen und ersetzen Script .csv

  • Hallo,

    ich suche schon seit einigen Stunden nach einem einfachen "suchen und ersetzen" script für eine .csv-Daten, die - falls nötig - mit dem Notepad geöffnet werden soll (nicht mit excel).

    Es soll einfach nur gesucht werden nach ">" und durch " " ersetzt werden, und dann wieder gespeicht werden, ob in der selben datei oder einer neuen ist egal.

    Das war mein Ansatz, aber ich glaube, es lässt sich eleganter lösen.
    $file = "C:\test" & "\test.csv"
    Run("notepad" & $file &")
    $text = stringreplace(FileRead("C:\test\test.csv," ">" ," ")
    FileWrite("C:\test\test.csv", $text)

    Könnte mir da jemand helfen?

  • Und, wo hapert's?

    [autoit]


    $sFile = "C:\test\test.csv"
    $hFile = FileOpen($sFile, 2) ;Im Erase-Mode öffnen
    $sText = StringReplace(FileRead($hFile), ">", " ")
    FileWrite($hFile, $sText)
    FileClose($hFile)

    [/autoit]

    Funktioniert das nicht?

    lg chess

  • Ne so gehts nicht.
    Du löscht vor dem einlesen bereits den Inhalt der Datei (Zeile 2) :P

    [autoit]

    #include <File.au3>

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

    Global $array[1]
    $sFile = "C:\test\test.csv"

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

    _FileReadToArray($sFile, $array)

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

    For $i = 1 To UBound($array) - 1
    $array[$i] = StringReplace($array[$i], "&gt;", " ")
    Next
    _FileWriteFromArray($sFile, $array, 1)

    [/autoit]
  • Dann liegt da ein Verständnisfehler vor. Ich dachte immer, FileOpen öffnet lediglich die Datei und greift noch nicht in diese ein, d.h. durch Parameter 2 bleibt sie unverändert, bis eine Schreib-Aktion durchgeführt wird.

    lg chess

  • Vielen Dank für die schnellen Antworten.

    #include <File.au3>

    Global $array[1]
    $sFile = "C:\test\test.csv"

    _FileReadToArray($sFile, $array)

    For $i = 1 To UBound($array) - 1
    $array[$i] = StringReplace($array[$i], "&gt;", " ")
    Next
    _FileWriteFromArray($sFile, $array, 1)

    Habe das jetzt so übernommen, aber es funktioniert immer noch nicht.

    Es passiert einfach nichts. Noch ne Idee?

  • Funktioniert doch einwandfrei, aber hier mal noch eine Variante mit Debuging, so dass du anhand der Fehlercodes (siehe Hilfe) das Problem eingrenzen kannst.

    [autoit]

    #include <File.au3>
    #include <array.au3>

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

    Global $array[1]
    $sFile = "C:\test\test.csv"
    if Not FileExists($sFile) Then Exit MsgBox(0,"Fehler","Datei existiert nicht")

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

    if _FileReadToArray($sFile, $array) = 0 Then
    MsgBox(0,"Fehler beim einlesen der Datei","errorcode: " & @error)
    Exit
    Else
    _ArrayDisplay($array,"unbearbeitetes Array")
    EndIf

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

    For $i = 1 To UBound($array) - 1
    $array[$i] = StringReplace($array[$i], "&gt;", " ")
    Next

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

    _ArrayDisplay($array,"bearbeitetes Array")
    if _FileWriteFromArray($sFile, $array, 1) = 0 Then MsgBox(0,"Fehler beim schreiben der Datei","errorcode: " & @error)

    [/autoit]
  • Ok, vielen Dank.

    Bei diesem Script erhalte ich die Fehlermeldung "Fehler beim schreiben der Datei" errorcode:1

  • Dann hat dein Benutzeraccount keine Schreibrechte für die Datei oder die Datei hat das Attribut schreibgeschützt. Eine manuelle Änderung mit Notepad dürfte also ebenfalls scheitern, kannste ja mal ausprobieren. Sofern sich die Datei in einem Windows Verzeichnis wie "programme" oder "system32" befindet kann es auch sein dass die Benutzerkontensteuerung einen schreibenden Zugriff verweigert.

  • Ja, du hast recht, das funktioniert auch nicht. Die Datei ist aber nicht schreibgeschützt und der Benutzer ist Mitglied von Administrator, HomeUser und Remotedesktopbenutzer. Die Datei liegt nicht in einem Windowsverzeichnis sondern auf C:\test\

    Hast du eine Idee, woran es noch liegen könnte?

  • Probier mal ob es geht, wenn du die Datei neu erstellst

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <array.au3>

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

    Global $array[1]
    $sFile = "C:\test\test.csv"
    $sFile_neu = "C:\test\test neu.csv"
    if Not FileExists($sFile) Then Exit MsgBox(0,"Fehler","Datei existiert nicht")

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

    if _FileReadToArray($sFile, $array) = 0 Then
    MsgBox(0,"Fehler beim einlesen der Datei","errorcode: " & @error)
    Exit
    Else
    _ArrayDisplay($array,"unbearbeitetes Array")
    EndIf

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

    For $i = 1 To UBound($array) - 1
    $array[$i] = StringReplace($array[$i], "&gt;", " ")
    Next

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

    _ArrayDisplay($array,"bearbeitetes Array")
    if _FileWriteFromArray($sFile_neu, $array, 1) = 0 Then MsgBox(0,"Fehler beim schreiben der Datei","errorcode: " & @error)

    [/autoit]

    Und probier mal, ob AutoIt mit FileOpen die Datei erstellen kann

    Spoiler anzeigen
    [autoit]

    $sFile_neu = "C:\test\test neu 2.csv"
    $hFile = FileOpen($sFile_neu, 2)

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

    ; Prüfen, ob Datei zum Schreiben geöffnet wurde
    If $hFile = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

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

    FileClose($hFile)

    [/autoit]
  • ich weiß nicht warum, aber es lag an der Datei. ich habe die datei gelöscht und eine neue mit selben dateinamen erstellt. jetzt gehts mit dem dem

    [autoit]

    #include <File.au3>

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

    Global $array[1]
    $sFile = "C:\test\test.csv"

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

    _FileReadToArray($sFile, $array)

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

    For $i = 1 To UBound($array) - 1
    $array[$i] = StringReplace($array[$i], "&gt;", "")
    Next
    _FileWriteFromArray($sFile, $array, 1)

    [/autoit]

    Vielen Dank für die Hilfe :)

    Einmal editiert, zuletzt von gss (16. Dezember 2012 um 13:57)