aletri
Goto Top

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!

Dim objShell,appdata
Set objShell = CreateObject("wscript.shell")  
appdata = objShell.ExpandEnvironmentStrings("%appdata%")  

strNewLine = "SimObjectPaths.*=Addon Scenery\Europe\Italy\AnconaX\simobjects"  
strFileName = appdata & "\Microsoft\FSX\fsx.cfg"  

Const FOR_READING = 1
Const FOR_WRITING = 2
strCheckForString = UCase("SimObjectPaths")  
Set objFS = CreateObject("Scripting.FileSystemObject")  
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)
For i = 0 To UBound(arrLines)
  if Len(arrLines(i)) >= Len(strCheckForString) then
    If Left(UCase(LTrim(arrLines(i))),Len(strCheckForString)) = strCheckForString and Left(UCase(LTrim(arrLines(i+1))),Len(strCheckForString)) <> strCheckForString Then
        num = CInt(Split(Split(arrLines(i),".")(1),"=")(0)) + 1  
        objTS.WriteLine arrLines(i) & vbNewline & Replace(strNewLine,"*",num)  
    else
        objTS.WriteLine arrLines(i)
    End If
Else
    objTS.WriteLine arrLines(i)
End if
next
objTS.Close

Besten Dank in Voraus für Eure Hilfe!

Content-ID: 323605

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

Ausgedruckt am: 24.11.2024 um 08:11 Uhr

emeriks
emeriks 12.12.2016 um 11:42:58 Uhr
Goto Top
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.
aletri
aletri 12.12.2016 um 13:12:47 Uhr
Goto Top
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!!

Dim objShell,appdata, regex, strContent, strFilename
Set objShell = CreateObject("wscript.shell")  
Set objFS = CreateObject("Scripting.FileSystemObject")  
Set regex = CreateObject("vbscript.regexp")  
regex.Multiline = True: regex.IgnoreCase = True
regex.Pattern = "SimObjPaths.*=Addon Scenery\Europe\Italy\AnconaX\simobjects"  

appdata = objShell.ExpandEnvironmentStrings("%appdata%")  


strNewLine = "SimObjectPaths.*=Addon Scenery\Europe\Italy\AnconaX\simobjects"  
strFileName = appdata & "\Microsoft\FSX\fsx.cfg"  

strContent = objFS.OpenTextFile(strFileName, 1).ReadAll()
if not regex.Test(strContent) then

Const FOR_READING = 1
Const FOR_WRITING = 2
strCheckForString = UCase("SimObjectPaths")  
Set objFS = CreateObject("Scripting.FileSystemObject")  
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)
For i = 0 To UBound(arrLines)
  if Len(arrLines(i)) >= Len(strCheckForString) then
    If Left(UCase(LTrim(arrLines(i))),Len(strCheckForString)) = strCheckForString and Left(UCase(LTrim(arrLines(i+1))),Len(strCheckForString)) <> strCheckForString Then
        num = CInt(Split(Split(arrLines(i),".")(1),"=")(0)) + 1  
        objTS.WriteLine arrLines(i) & vbNewline & Replace(strNewLine,"*",num)  
    else
        objTS.WriteLine arrLines(i)
    End If
Else
    objTS.WriteLine arrLines(i)
End if
next
objTS.Close
End if
emeriks
emeriks 12.12.2016 um 15:41:00 Uhr
Goto Top
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.
131381
131381 13.12.2016 um 08:16:58 Uhr
Goto Top
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.
regex.Pattern = "SimObjPaths.*?=Addon Scenery\\Europe\\Italy\\AnconaX\\simobjects"  
Gruß
aletri
aletri 13.12.2016 um 09:49:31 Uhr
Goto Top
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:
[Main]
User Objects=Airplane, Helicopter
SimObjectPaths.0=SimObjects\Airplanes
SimObjectPaths.1=SimObjects\Rotorcraft
SimObjectPaths.2=SimObjects\GroundVehicles
SimObjectPaths.3=SimObjects\Boats
SimObjectPaths.4=SimObjects\Animals
SimObjectPaths.5=SimObjects\Misc
Maximized=2
Location=320,136,1360,914,\\.\DISPLAY1
HideMenuNormal=0
HideMenuFullscreen=1
ProcSpeed=9249
PerfBucket=7

[PANELS]
IMAGE_QUALITY=1
QUICKTI
131381
Lösung 131381 13.12.2016 aktualisiert um 10:03:08 Uhr
Goto Top
SimObjectPaths
Schau dir den Regex und deine Textdatei nochmal an, dann siehst du den Fehler face-smile SimObjPaths

Mal wieder nicht gefrühstückt was face-wink
aletri
aletri 13.12.2016 um 10:19:20 Uhr
Goto Top
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