Bei der Suche nach bestimmten string in eine text-Datei mit VBS-Skript
Ich muss die Zeichenfolge "Test Case" & index in eine txt-Datei.
Ich gebe Ihnen ein Beispiel, die Zeilen, die Sie finden in dieser Datei:
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr>
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr>
Wie Sie sehen können, in der zweiten Zeile habe ich ein vorkommen der Zeichenfolge "Test-Fall".
Was ich will zu tun ist, fügen Sie einen anderen bestimmten string in der Zeile, die vorausgeht wo der "Test-Fall 5" wird angezeigt. Zum Beispiel:
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr>
<tr><td><a href="../../Logs/DD/Beginning_of_DD_TC5.html">Beginning_of_DD_TC5</a></td></tr>
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr>
Es ist auch wichtig, dass die Zeile füge ich einen index i, die abhängig von der Test-Fall-Nummer, und ich muss hinzufügen, dass es vor dem ersten vorkommen von "Test cases" & ich, i dont care über die folgenden Ereignisse.
Getestet habe ich, wenn InStr-Funktion gearbeitet, mit einem Beispiel:
Dim objFSO, filepath, objInputFile, tmpStr, substrToFind
Set objFSO = CreateObject("Scripting.FileSystemObject")
filepath = "C:\VBS\filediprova.txt"
substrToFind = "<tr><td><a href=" & chr(34) & "../Test case 5"
Set objInputFile = objFSO.OpenTextFile(filepath)
tmpStr = objInputFile.ReadLine
If InStr(tmpStr, substrToFind) <= 0 Then
WScript.Echo "No matches"
Else
WScript.Echo "Found match"
End If
Und es funktioniert, er erkennt meine substring. In diesem kleinen Beispiel der txt-Datei nur contans die followingline:
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr>
Nun, wenn ich versuche, eine Schleife über eine Datei mit viel mehr Zeilen ich habe ein problem, ich benutze den gleichen InStr-Funktion.
Ich schrieb die folgende Schleife:
Do until objInputFile.AtEndOfStream
strToAdd = "<tr><td><a href=" & chr(34) & "../../Logs/DD/Beginning_of_DD_TC" & CStr(index) & ".html" & chr(34) & ">Beginning_of_DD_TC" & CStr(index) & "</a></td></tr>"
substrToFind = "<tr><td><a href=" & chr(34) & "../Test case " & index
firstStr = "<?xml version" 'my file always starts like this
tmpStr = objInputFile.ReadLine
If InStr(tmpStr, substrToFind) <= 0 Then
If Instr(tmpStr, firstStr) > 0 Then
text = tmpStr 'to avoid the first empty line
Else
text = text & vbCrLf & tmpStr
End If
Else
text = text & vbCrLf & strToAdd & vbCrLf & tmpStr
index = index + 1
End If
Loop
Was ist falsch?
InformationsquelleAutor Luceye85 | 2013-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, mit einem regulären Ausdrücke anstelle von string-Operationen:
Wird der reguläre Ausdruck mit einem line feed (
\n
), gefolgt von einer Zeile mit der ZeichenfolgeTest Case
gefolgt von einer Zahl (\d
), und der Ersatz wird vorangestellt, dass mit dem text, den Sie einfügen möchten (variablenewtext
). Einstellungre.Global = False
macht die Ersatz-Stopp nach der ersten übereinstimmung.Wenn die Zeilenumbrüche in Ihren text-Datei codiert sind, als
CR-LF
(carriage return + line feed) Sie haben Sie zu ändern\n
in\r\n
undvbLf
invbCrLf
.Wenn Sie ändern müssen, um mehrere text-Dateien, können Sie es in eine Schleife wie diese:
Versuchen Sie dieser und natürlich die Dokumentation.
InformationsquelleAutor Ansgar Wiechers
Wow, nach ein paar versuchen habe ich endlich herausgefunden, wie man mit meinen Textänderungen in vbs. Der code funktioniert perfekt, es gibt mir die Ergebnisse, die ich erwartet hatte. Vielleicht ist es nicht der beste Weg, dies zu tun, aber es macht seinen job.
Hier ist der code:
Dies ist die original txt-Datei
Und das ist das Ergebnis erwarte ich, dass
InformationsquelleAutor Luceye85
Versuchen zu ändern, wie diese ..
In Wahrheit ist die korrekte Modifikation wurde CStr(index), ich habe überprüft, ob es so funktioniert, aber es funktioniert nicht. Möglicherweise gibt es einige andere Grund, warum...
ich vermutete, dass index ist integer var ..
Vielleicht ist das problem in der Schleife
ich habe versucht zu ändern .. also versuchen Sie es
InformationsquelleAutor matzone