1.9k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von mikoop Experte (2.7k Punkte)
Hallo Supporter,

Wie in diesem Thread schon ausführlich diskutiert, steuere ich eine Bewässerungsanlage per PC und Relaisschnittstellen.

Von der im Ursprungsthread geplanten Lösung per batch-Datei habe ich mich jetzt verabschiedet und bin im Laufe der Diskussion auf folgenden Ansatz gekommen:

Ich habe eine txt-Datei erstellt, die die einzelnen Bewässerungskreise enthält sowie einen Platzhalter für die unterschiedlichen Bewässerungslängen.

Über ein vbs Script möchte ich diese Platzhalter ersetzen und dann alles in eine andere Datei speichern.

Zu ersetzen sind 4 verschiedene Platzhalter:

[list]trocken mit 200
normal mit 300
feucht mit 400
ende mit weiter[/list]


Der folgende Code (auf den mich Massaraksch hinwies, vielen Dank dafür) ersetzt 1 Platzhalter, ich weiß aber nicht, wie das mit mehreren Platzhaltern funktionieren kann, meine bisherigen Versuche sind alle fehlgeschlagen:

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("standard.txt", ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "normal", "sleep 300")

Set objFile = objFSO.OpenTextFile("aktuell.lec2", ForWriting)
objFile.WriteLine strNewText
objFile.Close




Wie bekomme ich es hin, dass mehrere Platzhalter (gleichzeitig) ersetzt werden?

Danke und Gruss, Mikoop

2 Antworten

0 Punkte
Beantwortet von
Was meinst du mit "gleichzeitig"?
Mit einem Aufruf von Replace mehrere Platzhalter ersetzen geht nicht. Dafür müsstest du reguläre Ausdrücke bemühen:
http://www.aspheute.com/artikel/20000829.htm

Aber du kannst die VBS-Replace-Funktion zwischen Lesen und Schreiben der Datei auch öfter hintereinander auf den selben Text anwenden:

text2=replace(text,pattern,string)
text3=replace(text2,pattern2,string2)
0 Punkte
Beantwortet von seymour Einsteiger_in (5 Punkte)
Hallo Mikoop,

der von Dir verwendete Code tauscht jeweils nur das erste Vorkommen des Suchstrings im gesamten Text aus. Probiere den untenstehenden Code mal aus. Hier wird der Text zeilenweise überprüft und geschrieben.

Grüße Seymour


Const ForWriting = 2,ForReading = 1


Set objFSO = CreateObject("Scripting.FileSystemObject")

Set Ifile = objFSO.OpenTextFile("standard.txt", ForReading)
Set Ofile = objFSO.CreateTextFile("aktuell.lec2")

Do while Ifile.AtEndOfStream <>true
cline = Ifile.Readline
f=0
if instr(cline, "normal") then
ncline = Replace(cline, "normal", "sleep 300")
f=1
end if
if instr(cline, "trocken") then
ncline = Replace(cline, "trocken", "sleep 200")
f=1
end if
if instr(cline, "feucht") then
ncline = Replace(cline, "feucht", "sleep 400")
f=1
end if
if instr(cline, "ende") then
ncline = Replace(cline, "ende", "weiter")
f=1
end if
if f=1 then
ofile.writeline ncline
else
ofile.writeline cline
end if
Loop
ifile.close
ofile.close
wsh.quit
...