File nach Wert durchsuchen

  • VBScript

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    File nach Wert durchsuchen

    Tach zusammen

    Ich muss eigentlich was simples machen, bekomms aber irgendwie nicht hin, also mein Skript macht einfach nix...

    Ziel wäre es, aus einem Text File einen Wert zu suchen und diesen dann zu ersetzen. In meinem Fall.

    Suche: "+"

    Ersetze mit: "00"

    Folgenden Code habe ich mal hinbekommen:

    Dim objFSO, QuellDatei, t

    QuellDatei ="c:\scripts\test.txt"

    Set QuellDatei = objFSO.OpenTextFile(QuellDatei)

    Do Until DateiAlt.atEndOfStream

    t = QuellDatei.ReadLine
    If Len(t) Then
    If InStr(t, "+") Then
    t = Replace(t, "+", "00")
    End If
    End If
    Loop
    QuellDatei.Close
    Diese Stelle, ist etwas sinnlos:

    Visual Basic-Quellcode

    1. Set QuellDatei = objFSO.OpenTextFile(QuellDatei)
    2. Do Until DateiAlt.atEndOfStream <--


    Das muss QuellDatei heißen

    gruss
    Das ist meine Signatur und sie wird wunderbar sein!
    Ohne die Änderungen wieder zu speichern, klappt das nicht.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Dim objFSO, QuellDatei, Zieldatei, t
    3. Dim QuellFile, ZielFile
    4. Const FOR_Input = 1, FOR_Output = 2
    5. QuellDatei ="test.txt"
    6. Zieldatei = "testneu.txt"
    7. Set objFSO = WScript.CreateObject("Scripting.Filesystemobject")
    8. Set QuellFile = objFSO.OpenTextFile(QuellDatei, FOR_Input)
    9. Set ZielFile = objFSO.OpenTextFile(ZielDatei, FOR_Output, True)
    10. Do Until Quellfile.atEndOfStream
    11. t = QuellFile.ReadLine
    12. t = Replace(t, "+", "00")
    13. ZielFile.WriteLine(t)
    14. Loop
    15. QuellFile.Close
    16. ZielFile.Close
    17. MsgBox("Fertig")
    Das Script liest zwar nicht zeilenweise ein (.ReadAll) ersetzt aber auch alles gewünschte in der Datei

    Visual Basic-Quellcode

    1. Dim objFSO, Quelldatei
    2. const Quelldatei="test.txt"
    3. Set objFSO = CreateObject("Scripting.FileSystemObject")
    4. Set objFile = objFSO.OpenTextFile(Quelldatei, 1) ' Lesen
    5. strText = objFile.ReadAll
    6. objFile.Close
    7. strNewText = Replace(strText, "+", "00")
    8. Set objFile = objFSO.OpenTextFile(Quelldatei, 2) ' Schreiben
    9. objFile.WriteLine strNewText
    10. objFile.Close

    aber als Provisorium geht das schon. Allerdings bereitet auch mir das zeilenweise Einlesen Probleme. Es kommt immer bei Zeile 7 "Objektvariable nicht gesetzt". Was mache ich falsch ?

    Visual Basic-Quellcode

    1. Dim objFSO, Quelldatei, Zieldatei, strLine
    2. Const Quelle="test.txt"
    3. Set objFSO = WScript.CreateObject("Scripting.FilesystemObject")
    4. Set Quelldatei = objFSO.OpenTextFile(Quelle, 1 ) ' zum Lesen
    5. Do Until Quelldatei.AtEndOfStream ' «««
    6. strLine = Quelldatei.ReadLine
    7. If InStr(1, strLine, "+", vbTextCompare) Then
    8. strLine = Replace(strLine, "+", "00")
    9. End If
    10. Quelldatei.Close
    11. Set Zieldatei = objFSO.OpenTextFile(Quelle, 2) ' zum Schreiben
    12. Zieldatei.WriteLine strLine
    13. Loop
    14. Zieldatei.Close

    :cursing:
    Es gibt mehrer Möglichkeiten.
    Man kann das Programm zum Löschen der Quelldatei und Umbenennen der Zieldatei in Quelldatei erweitern.

    Oder die Datei komplett einlesen, ändern und zurückschreiben. (Siehe auch 1. Beispiel von Sachsenbauch).

    Nicht mit der Originaldatei testen!

    Visual Basic-Quellcode

    1. Option Explicit
    2. Dim objFSO, QuellDatei, t
    3. Dim QuellFile
    4. Const FOR_Input = 1, FOR_Output = 2
    5. QuellDatei ="test.txt"
    6. Set objFSO = WScript.CreateObject("Scripting.Filesystemobject")
    7. Set QuellFile = objFSO.OpenTextFile(QuellDatei, FOR_Input)
    8. t = QuellFile.ReadAll()
    9. t = Replace(t, "+", "00")
    10. QuellFile.Close
    11. Set QuellFile = objFSO.OpenTextFile(QuellDatei, FOR_Output,True)
    12. QuellFile.Write(t & vbCrLf)
    13. QuellFile.Close
    14. MsgBox("Fertig")


    @sachsenbauch
    Es kommt immer bei Zeile 7 "Objektvariable nicht gesetzt". Was mache ich falsch ?


    Die "Test.txt" wird nicht gefunden.
    Allerdings würde in der geänderten Datei nur die letzte Zeile des Originals stehen.
    Tach zusammen

    Ich hätte da noch eine Frage:

    Momentan Frage ich ja ab:

    Visual Basic-Quellcode

    1. Dim objFSO, QuellDatei, ZielDatei, t
    2. Dim QuellFile, ZielFile
    3. Const FOR_Input = 1, FOR_Output = 2
    4. QuellDatei = "\\amchzlmcfs01.also.intra\profiles\" & username & "\Flex\WINDOWS\phonenumber_raw.txt"
    5. ZielDatei = "\\amchzlmcfs01.also.intra\profiles\" & username & "\Flex\WINDOWS\phonenumber.txt"
    6. Set objFSO = WScript.CreateObject("Scripting.Filesystemobject")
    7. Set QuellFile = objFSO.OpenTextFile(QuellDatei, FOR_Input)
    8. Set ZielFile = objFSO.OpenTextFile(ZielDatei, FOR_Output, True)
    9. Do Until QuellFile.atEndOfStream
    10. t = QuellFile.Readline
    11. t = Replace(t, "+", "00")
    12. ZielFile.WriteLine(t)
    13. Loop
    14. QuellFile.Close
    15. ZielFile.Close


    Jetzt möchte ich aber folgendes machen:

    if +49

    then 0049

    if 079

    then +4179

    usw. Dieser code müsste simpel erweiterbar sein mit weiteren abfragen, resp. änderungen.

    Hat mir da einer einen Input, da ich mit meiner VBS Weiterbildung noch nicht soweit bin, da selber drauf zu kommen.
    Hallo zusammen

    Ich wieder mal...

    Das Skript funktioniert soweit, jedoch hatte ich heute mehrmals das Problem, dass ich eine Fehlermeldung erhalten habe:

    Line 14

    Char: 1

    Error: Index ausserhalb des gültigen Bereichs

    code: 800A0009



    Hier nochmals der Code:

    Quellcode

    1. Set objFSO = CreateObject("Scripting.FileSystemObject")
    2. set WshShell = WScript.CreateObject("WScript.Shell")
    3. UserName = WshShell.ExpandEnvironmentStrings("%Username%")
    4. If objFSO.FileExists ("PFAD\phonenumber_raw.txt") THEN
    5. Set del = CreateObject("Scripting.FileSystemObject")
    6. del.GetFile("PFAD\phonenumber_raw.txt").Delete
    7. end if
    8. Set fso = CreateObject("Scripting.FileSystemObject")
    9. Set MyFile = fso.CreateTextFile("PFAD\phonenumber_raw.txt",true)
    10. MyFile.close
    11. Set oFile = fso.OpenTextFile("PFADphonenumber_raw.txt",8,true)
    12. oFile.WriteLine Wscript.Arguments(0)
    13. oFile.close
    14. Dim objFSO, QuellDatei, ZielDatei, t
    15. Dim QuellFile, ZielFile
    16. Const FOR_Input = 1, FOR_Output = 2
    17. QuellDatei = "PFAD\phonenumber_raw.txt"
    18. ZielDatei = "PFAD\phonenumber.txt"
    19. Set objFSO = WScript.CreateObject("Scripting.Filesystemobject")
    20. Set QuellFile = objFSO.OpenTextFile(QuellDatei, FOR_Input)
    21. Set ZielFile = objFSO.OpenTextFile(ZielDatei, FOR_Output, True)
    22. Do Until QuellFile.atEndOfStream
    23. t = QuellFile.Readline
    24. t = Replace(t, "+", "+49")
    25. t = Replace(t, "+490", "+")
    26. ZielFile.WriteLine(t)
    27. Loop
    28. QuellFile.Close
    29. ZielFile.Close
    30. If objFSO.FileExists ("PFAD\phonenumber_raw.txt") THEN
    31. Set del = CreateObject("Scripting.FileSystemObject")
    32. del.GetFile("PFAD\phonenumber_raw.txt").Delete
    33. end if




    Das hier ist Line 14:

    oFile.WriteLine Wscript.Arguments(0)


    Wie lange, etc. darf eine Nummer oder Text sein der hier in das File geschrieben wird? Finde irgendwie nicht raus, welcher Typ der Datentyp ist..
    Hi

    Visual Basic-Quellcode

    1. Wscript.Arguments(0)


    Gibt dir das erste übergebene Argument beim Aufruf des Scripts zurück.
    Übergibst du kein Argument, dann existiert Wscript.Arguments(0) nicht und es folgt eine Exception.
    Das ist meine Signatur und sie wird wunderbar sein!