Suchen und durch Variable ersetzen
Hallo zusammen,
ich habe ganz ähnliches vor, wie hier schon einmal gefragt wurde. Doch irgendwie bringen mich die hier gezeigten Lösungen nicht ans Ziel.
(https://www.administrator.de/index.php?content=128409)
Ich habe eine Textdatei, in der ich den Wert "000001", der ca. 700 mal vorkommt ersetzen möchte. (000001, 000002, usw.)
Der genaue Ausdruck in Text sieht so aus:
Die heir gezeiten Beispiele habe ich dann ein wenig umgebaut, um meinem Ziel näher zu kommen. So in etwa siehts aus:
Grundsätzlich passiert auch schon was. In der Ausgabedatei wird der Wert dann immer durch "1" ersetzt. Leider wird die "1" aber nicht hochgezählt.
Woran kann es liegen? Wäre für einen Hinweis sehr dankbar!
ich habe ganz ähnliches vor, wie hier schon einmal gefragt wurde. Doch irgendwie bringen mich die hier gezeigten Lösungen nicht ans Ziel.
(https://www.administrator.de/index.php?content=128409)
Ich habe eine Textdatei, in der ich den Wert "000001", der ca. 700 mal vorkommt ersetzen möchte. (000001, 000002, usw.)
Der genaue Ausdruck in Text sieht so aus:
<gp:cache id="000001" available="True" archived="False">
Die heir gezeiten Beispiele habe ich dann ein wenig umgebaut, um meinem Ziel näher zu kommen. So in etwa siehts aus:
Const StartNum = 1
Const eFile = "D:\Eingabe.Txt"
Const aFile = "D:\Ausgabe.Txt"
Const Tag1 = "<gp:cache id="
Const Tag2 = "available="
Dim RE, Fso, File, Text, Tag, i
Set RE = New RegExp: i = StartNum
Set Fso = CreateObject("Scripting.FileSystemObject")
With RE
.Global = True: .IgnoreCase = True: .Pattern = Tag1 & ".*" & Tag2
End With
Set File = Fso.OpenTextFile(eFile): Text = File.ReadAll: File.Close
For Each Tag In RE.Execute(Text)
Text = Replace(Text, Tag, Tag1 & """" & i &"""" & Tag2):
i = i + 1
Next
Set File = Fso.CreateTextFile(aFile): File.Write Text: File.Close
Grundsätzlich passiert auch schon was. In der Ausgabedatei wird der Wert dann immer durch "1" ersetzt. Leider wird die "1" aber nicht hochgezählt.
Woran kann es liegen? Wäre für einen Hinweis sehr dankbar!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 149794
Url: https://administrator.de/forum/suchen-und-durch-variable-ersetzen-149794.html
Ausgedruckt am: 19.04.2025 um 06:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo FlorianBl!
Dein Ergebnis ist relativ einfach zu erklären - da Du "
... daher entweder als Zeile 23
oder, einfacher (wenn konstant "000001" zu ersetzen ist):
oder die angepasste Version meines Scripts im verlinkten Beitrag:
Grüße
bastla
Dein Ergebnis ist relativ einfach zu erklären - da Du "
Replace()
" nicht auf das jeweils erste Vorkommen des Suchstrings beschränkt hast, werden alle passenden Strings bereits beim ersten Schleifendurchlauf ersetzt (und da diese ja immer "000001" lauten, wäre RegEx gar nicht nötig) - und zwar mit dem dann gültigen Wert für i von 1; danach gibt es den ursprünglich gesuchten String nicht mehr, weshalb auch nix ersetzt werden kann ....... daher entweder als Zeile 23
Text = Replace(Text, Tag, Tag1 & """" & i & """ " & Tag2)
Const eFile = "D:\Eingabe.Txt"
Const aFile = "D:\Ausgabe.Txt"
Const Tag1 = "<gp:cache id="""
Const Tag2 = """ available="
Const OldNum = "000001"
Const StartNum = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Text = fso.OpenTextFile(eFile).ReadAll
i = StartNum
Do While InStr(Text, Tag1 & OldNum & Tag2) > 0
Text = Replace(Text, Tag1 &OldNum & Tag2, Tag1 & i & Tag2, 1, 1)
i = i + 1
Loop
fso.CreateTextFile(aFile).Write Text
Const StartNum = 1
Ein = "D:\Eingabe.Txt"
Aus = "D:\Ausgabe.Txt"
Tag1 = "<gp:cache id="""
Tag2 = """ available="
N = StartNum
Set fso = CreateObject("Scripting.FileSystemObject")
T1 = fso.OpenTextFile(Ein).ReadAll
Set rE = New RegExp
rE.Pattern = Tag1 & "(\d*)" & Tag2
rE.IgnoreCase = True
rE.Global = True
SP = 1 'Startposition im String
For Each M In rE.Execute(T1)
P = M.FirstIndex + M.Length + 1 'Endposition des die Fundstelle enthaltenden Teilstrings
'im gefundenen Teilstring (des Originaltextes) die bisherige Nummer ersetzen und zum neuen Text hinzufügen
T2 = T2 & Replace(Mid(T1, SP, P - SP), M.SubMatches(0), N, 1, 1)
N = N + 1
SP = P 'Startposition = vorige Endposition
Next
T2 = T2 & Mid(T1, SP) 'den Teil nach der letzten Fundstelle auch noch mitnehmen
fso.CreateTextFile(Aus).Write T2
bastla