mac2345
Goto Top

VBS Für Änderung Mehere Texte in einer Datei

Hallo

ich benötige etwas Hilfe beim schreibe von vbs.
Ich habe eine Datei die ich in einem bestimmten Bereich mehrere male mit unterschiedlichen zeichen ändern möchte.

z.b
Code
48 7501 Y 33316793.91 X 5691047.817
49 7501 Y 33316800.42 X 5691056.244
50 5283 Y 33316787.42 X 5691025.891
51 5283 Y 33316806.35 X 5691050.084

mehrere Codes in einer Datei in einem bestimmten Bereich ändern

Meine Anfang


Set objFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
Const ForWriting = 2

' Datei öffnen und Text einlesen und schließen
Set objFile = objFSO.OpenTextFile("test.dat", ForReading)
strText = objFile.ReadAll
objFile.Close


' Änderungen am Inhalt

strNewText = Replace(strText, "5283","5000")

' Änderungen am Inhalt

strNewText = Replace(strText, "7501","7000")


' Neue Datei erstellen mit neuen Inhalten füllen
set resultFile = objFSO.CreateTextFile("test-neu.txt", true)
resultFile.WriteLine strNewText
resultFile.Close


Bitte um Hilfe

Content-Key: 366757

Url: https://administrator.de/contentid/366757

Printed on: April 25, 2024 at 10:04 o'clock

Member: emeriks
emeriks Mar 02, 2018 at 12:15:03 (UTC)
Goto Top
Hi,
Bitte um Hilfe
wobei?
Was ist die Frage?
Wo hast Du ein Problem?

Am Rande: Nutze beim posten von Quellcodes bitte Code-Tags!
.... code ....

E.
Member: colinardo
Solution colinardo Mar 02, 2018 updated at 13:49:22 (UTC)
Goto Top
Servus.
dein Code hat mehrere Schwachstellen und Fehler.

Erstens folgendes fehlerhaftes Konstrukt:

' Änderungen am Inhalt
strNewText = Replace(strText, "5283","5000")
' Änderungen am Inhalt
strNewText = Replace(strText, "7501","7000")
Das ändert jedes mal immer nur die Quelle , d.h. das strNewText immer nur den einen oder anderen Ersetzungsvorgang enthält, du hättest hier im zweiten Ersetzungsvorgang als ersten Parameter strNewText einsetzen müssen dann hätte am Schluss strNewText beide Ersetzungen enthalten.

Zweite Schwachstelle ist das du damit deine Zahlen an irgendeiner Stelle im Text ersetzt, d.h. das auch die Werte in hinteren Textstellen ersetzt werden könnten. Das könntest du nun entweder mit dem Durchlaufen jeder Zeile und dem Extrahieren der Zeichen mit MID() erreichen, oder du machst das ganze komfortabel mit Regular Expressions wie in diesem Beispiel:

'Eingabepfad  
Const FILEIN = "C:\test.dat"  
'Ausgabepfad  
Const FILEOUT = "C:\test_out.dat"  

'Objekte  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set regex = CreateObject("vbscript.regexp")  

'Regular Expression Objekteigenschaften festlegen  
regex.Global = True: regex.IgnoreCase = True: regex.MultiLine = True

'Dateiinhalt einlesen  
strContent = fso.OpenTextFile(FILEIN,1).ReadAll()

'Ersetzungsarrays erstellen  
arrSearch = Array("5283","7501")  
arrReplace = Array("5000","7000")  

'Für jeden Suchterm  
For i = 0 To UBound(arrSearch)
	'setze den Searchpattern  
	regex.Pattern = "^(\s+\d+\s+)" & arrSearch(i)  
	'und ersetze ihn durch den Ersetzungsterm  
	strContent = regex.Replace(strContent,"$1" & arrReplace(i))  
Next

'schreibe den Inhalt in die Ausgabedatei zurück  
fso.OpenTextFile(FILEOUT,2,True).Write strContent

MsgBox "Fertig"  
Hoffe das klärt deine Fragen.

Grüße Uwe
Member: Mac2345
Mac2345 Mar 02, 2018 at 13:27:37 (UTC)
Goto Top
Danke bringt aber eine Fehlermeldung

Zeile 14
Zeichen 1
Fehler Der Pfad wurde nicht gefunden.
Code 800A004C
Quelle Laufzeitfehler in Microsoft VBScript
Member: colinardo
colinardo Mar 02, 2018 updated at 13:37:41 (UTC)
Goto Top
Dann hast du den Pfad in der Konstanten in Zeile 2 falsch angegeben! Da gehört ein kompletter Pfad rein, nicht nur ein Dateiname. Skript funktioniert und wurde nat. getestet. Ich habe ja extra für dich als Anfänger alles nochmal kommentiert ..
Member: Mac2345
Mac2345 Mar 02, 2018 at 13:38:46 (UTC)
Goto Top
Ja es Funktioniert aber ändert nichts in der out
Member: colinardo
colinardo Mar 02, 2018 updated at 13:43:10 (UTC)
Goto Top
Dann hast du deinen Quelltext nicht korrekt gepostet.

Ich gehe davon aus das die zu ersetzende Zahl hinter einer oder mehreren Ziffern und einem oder mehreren Leerzeichen am Zeilenanfang folgt, so wie du oben gepostet hast.

Und die Ausgabe erfolgt natürlich in die Datei die du in Zeile 4 angibst !

Also bitte das nächste mal Quelltext oder Code bitte Codetags verwenden, Danke!
In der Symbolleiste das </> benutzen.
Member: Mac2345
Mac2345 Mar 02, 2018 at 13:43:58 (UTC)
Goto Top
44..7501..Y..33316747.89 X 5690988.157
45..7501..Y..33316754.31 X 5690996.428
46..7501..Y..33316760.76 X 5691004.873
47..7501..Y..33316787.33 X 5691039.369
48..7501..Y..33316793.91 X 5691047.817
49..7501..Y..33316800.42 X 5691056.244
50..5283..Y..33316787.42 X 5691025.891
51..5283..Y..33316806.35 X 5691050.084
52..5283..Y..33316803.06 X 5691058.200

das ist natürlich ungünstig hier nochmal mit richtigen Zeilenabstand
Member: colinardo
colinardo Mar 02, 2018 updated at 13:47:13 (UTC)
Goto Top
OK! Danke, dann ist es klar, habe den Pattern oben dafür angepasst, ich gehe mal davon aus das die Punkte Leerzeichen oder Tabs sind.
Member: Mac2345
Mac2345 Mar 02, 2018 at 13:47:18 (UTC)
Goto Top
das sind Leerzeichen Zeile 31-35
Member: colinardo
colinardo Mar 02, 2018 at 13:49:42 (UTC)
Goto Top
S.o.
Member: Mac2345
Mac2345 Mar 02, 2018 at 19:43:08 (UTC)
Goto Top
Ja danke eine frage noch wenn ich diesen mal in einem anderen Zeilenbereich brauche welche Änderung muss ich vornehmen
Member: colinardo
colinardo Mar 02, 2018 updated at 21:15:28 (UTC)
Goto Top
Zeile 23 den Regular Expressions String.
Member: colinardo
colinardo Mar 05, 2018 at 15:21:36 (UTC)
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.