gelöst Per Vbscript bestimmte Zeile ungeachtet der Nummerierung prüfen
Guten Morgen an alle
Der folgende Vbscript fügt einer Texdatei eine bestimmte Zeile ein, das klappt soweit...
Nun sollte der Script diese Zeile nicht einfügen wenn Zeile (ungeachtet der Numerierung!!) bereits vorhanden ist!
Besten Dank in Voraus für Eure Hilfe!
Der folgende Vbscript fügt einer Texdatei eine bestimmte Zeile ein, das klappt soweit...
Nun sollte der Script diese Zeile nicht einfügen wenn Zeile (ungeachtet der Numerierung!!) bereits vorhanden ist!
01.
Dim objShell,appdata
02.
Set objShell = CreateObject("wscript.shell")
03.
appdata = objShell.ExpandEnvironmentStrings("%appdata%")
04.
05.
strNewLine = "SimObjectPaths.*=Addon Scenery\Europe\Italy\AnconaX\simobjects"
06.
strFileName = appdata & "\Microsoft\FSX\fsx.cfg"
07.
08.
Const FOR_READING = 1
09.
Const FOR_WRITING = 2
10.
strCheckForString = UCase("SimObjectPaths")
11.
Set objFS = CreateObject("Scripting.FileSystemObject")
12.
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
13.
strContents = objTS.ReadAll
14.
objTS.Close
15.
arrLines = Split(strContents, vbNewLine)
16.
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)
17.
For i = 0 To UBound(arrLines)
18.
if Len(arrLines(i)) >= Len(strCheckForString) then
19.
If Left(UCase(LTrim(arrLines(i))),Len(strCheckForString)) = strCheckForString and Left(UCase(LTrim(arrLines(i+1))),Len(strCheckForString)) <> strCheckForString Then
20.
num = CInt(Split(Split(arrLines(i),".")(1),"=")(0)) + 1
21.
objTS.WriteLine arrLines(i) & vbNewline & Replace(strNewLine,"*",num)
22.
else
23.
objTS.WriteLine arrLines(i)
24.
End If
25.
Else
26.
objTS.WriteLine arrLines(i)
27.
End if
28.
next
29.
objTS.Close
30.
7 Antworten
- LÖSUNG emeriks schreibt am 12.12.2016 um 11:42:58 Uhr
- LÖSUNG aletri schreibt am 12.12.2016 um 13:12:47 Uhr
- LÖSUNG emeriks schreibt am 12.12.2016 um 15:41:00 Uhr
- LÖSUNG 131381 schreibt am 13.12.2016 um 08:16:58 Uhr
- LÖSUNG aletri schreibt am 13.12.2016 um 09:49:31 Uhr
- LÖSUNG 131381 schreibt am 13.12.2016 um 10:02:12 Uhr
- LÖSUNG aletri schreibt am 13.12.2016 um 10:19:20 Uhr
- LÖSUNG 131381 schreibt am 13.12.2016 um 10:02:12 Uhr
- LÖSUNG aletri schreibt am 13.12.2016 um 09:49:31 Uhr
- LÖSUNG aletri schreibt am 12.12.2016 um 13:12:47 Uhr
LÖSUNG 12.12.2016 um 11:42 Uhr
Hi,
entweder mit RegEx (nicht meine Stärke) oder Du prüfst das in einem extra Vorlauf
Wäre hilfreich, wenn Du diese Zeilen hier mal zeigen würdest.
E.
entweder mit RegEx (nicht meine Stärke) oder Du prüfst das in einem extra Vorlauf
Wäre hilfreich, wenn Du diese Zeilen hier mal zeigen würdest.
E.
LÖSUNG 12.12.2016 um 13:12 Uhr
Hallo emeriks
habs mit regEx so versucht....klappt mit text einfügen ...aber wenn Script wieder ausgeführt wird habe ich dann den doppelten Eintrag!!
habs mit regEx so versucht....klappt mit text einfügen ...aber wenn Script wieder ausgeführt wird habe ich dann den doppelten Eintrag!!
01.
Dim objShell,appdata, regex, strContent, strFilename
02.
Set objShell = CreateObject("wscript.shell")
03.
Set objFS = CreateObject("Scripting.FileSystemObject")
04.
Set regex = CreateObject("vbscript.regexp")
05.
regex.Multiline = True: regex.IgnoreCase = True
06.
regex.Pattern = "SimObjPaths.*=Addon Scenery\Europe\Italy\AnconaX\simobjects"
07.
08.
appdata = objShell.ExpandEnvironmentStrings("%appdata%")
09.
10.
11.
strNewLine = "SimObjectPaths.*=Addon Scenery\Europe\Italy\AnconaX\simobjects"
12.
strFileName = appdata & "\Microsoft\FSX\fsx.cfg"
13.
14.
strContent = objFS.OpenTextFile(strFileName, 1).ReadAll()
15.
if not regex.Test(strContent) then
16.
17.
Const FOR_READING = 1
18.
Const FOR_WRITING = 2
19.
strCheckForString = UCase("SimObjectPaths")
20.
Set objFS = CreateObject("Scripting.FileSystemObject")
21.
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
22.
strContents = objTS.ReadAll
23.
objTS.Close
24.
arrLines = Split(strContents, vbNewLine)
25.
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)
26.
For i = 0 To UBound(arrLines)
27.
if Len(arrLines(i)) >= Len(strCheckForString) then
28.
If Left(UCase(LTrim(arrLines(i))),Len(strCheckForString)) = strCheckForString and Left(UCase(LTrim(arrLines(i+1))),Len(strCheckForString)) <> strCheckForString Then
29.
num = CInt(Split(Split(arrLines(i),".")(1),"=")(0)) + 1
30.
objTS.WriteLine arrLines(i) & vbNewline & Replace(strNewLine,"*",num)
31.
else
32.
objTS.WriteLine arrLines(i)
33.
End If
34.
Else
35.
objTS.WriteLine arrLines(i)
36.
End if
37.
next
38.
objTS.Close
39.
End if
40.
LÖSUNG 12.12.2016 um 15:41 Uhr
Wäre hilfreich, wenn Du diese Zeilen hier mal zeigen würdest.
Mein Text war vielleicht mißverständlich. Ich meine die Zeile(n) aus der Textdatei.LÖSUNG 13.12.2016 um 08:16 Uhr
regex.Pattern = "SimObjPaths.*=Addon Scenery\Europe\Italy\AnconaX\simobjects"
Das kann ja bei dem Regex nichts werden... Backslashes und viele andere Sonderzeichen müssen im Pattern natürlich escaped werden.01.
regex.Pattern = "SimObjPaths.*?=Addon Scenery\\Europe\\Italy\\AnconaX\\simobjects"
LÖSUNG 13.12.2016 um 09:49 Uhr
Hallo mikrotik
besten Dank....aber irgendwas mach ich falsch....bei mehrmahligem Ausführen des Scripts wird jedesmals neue Zeile "SimOjectPahts.nummer....usw erstellt und das sollte es nicht wenn schon "AnconaX" vorhanden ist.
Zur Veranschaulichung hier unten noch einen Auszug aus der Textadei:
besten Dank....aber irgendwas mach ich falsch....bei mehrmahligem Ausführen des Scripts wird jedesmals neue Zeile "SimOjectPahts.nummer....usw erstellt und das sollte es nicht wenn schon "AnconaX" vorhanden ist.
Zur Veranschaulichung hier unten noch einen Auszug aus der Textadei:
01.
[Main]
02.
User Objects=Airplane, Helicopter
03.
SimObjectPaths.0=SimObjects\Airplanes
04.
SimObjectPaths.1=SimObjects\Rotorcraft
05.
SimObjectPaths.2=SimObjects\GroundVehicles
06.
SimObjectPaths.3=SimObjects\Boats
07.
SimObjectPaths.4=SimObjects\Animals
08.
SimObjectPaths.5=SimObjects\Misc
09.
Maximized=2
10.
Location=320,136,1360,914,\\.\DISPLAY1
11.
HideMenuNormal=0
12.
HideMenuFullscreen=1
13.
ProcSpeed=9249
14.
PerfBucket=7
15.
16.
[PANELS]
17.
IMAGE_QUALITY=1
18.
QUICKTI
19.
LÖSUNG 13.12.2016, aktualisiert um 10:03 Uhr
SimObjectPaths
Schau dir den Regex und deine Textdatei nochmal an, dann siehst du den Fehler SimObjPathsMal wieder nicht gefrühstückt was
LÖSUNG 13.12.2016 um 10:19 Uhr
Hallo mikrotik
hattest Recht.....hatte nicht gefrühstückt?!? (manchmal sieht man vor lauter Bäume den Wald nicht!!)
Klappt alles..Tausend Dank
Gruss
aletri
hattest Recht.....hatte nicht gefrühstückt?!? (manchmal sieht man vor lauter Bäume den Wald nicht!!)
Klappt alles..Tausend Dank
Gruss
aletri
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte