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-Key: 323605

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

Printed on: April 25, 2024 at 10:04 o'clock

Member: emeriks
emeriks Dec 12, 2016 at 10:42:58 (UTC)
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.
Member: aletri
aletri Dec 12, 2016 at 12:12:47 (UTC)
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
Member: emeriks
emeriks Dec 12, 2016 at 14:41:00 (UTC)
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.
Mitglied: 131381
131381 Dec 13, 2016 at 07:16:58 (UTC)
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ß
Member: aletri
aletri Dec 13, 2016 at 08:49:31 (UTC)
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
Mitglied: 131381
Solution 131381 Dec 13, 2016 updated at 09:03:08 (UTC)
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
Member: aletri
aletri Dec 13, 2016 at 09:19:20 (UTC)
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