aletri
Goto Top

VBS Textzeile in fsx.cfg Datei an bestimmte Stelle einfügen

Guten Abende Leute

Mit dem hier aufgeführten Script möchte ich den Text "AutogenDescriptionsFilename=AutogenDescriptions_EFRO.xml"
einfügen was soweit auch mit der Test fsx.cfg im Pfad c:\... klappt!
Was ich nicht hinbekomme ist :

1.
den Text an bestimmte Stelle einzufügen nämlich unmittelbar nach "[TERRAIN]" !

Hier ein Auszug der fsx.cfg Datei und die Stelle wo's rein müsste:
IFROnly=0
AIRPORT_SCENERY_DENSITY=3
[TERRAIN]
HIER MUSS ES REIN !
LOD_RADIUS=4.500000
MESH_COMPLEXITY=100
MESH_RESOLUTION=23
TEXTURE_RESOLUTION=29
AUTOGEN_DENSITY=2
DETAIL_TEXTURE=1
WATER_EFFECTS=5
[AContain]
ShowLabels=0

Const Datei = "C:\fsx.cfg"   
Const Eintrag = "AutogenDescriptionsFilename=AutogenDescriptions_EFRO.xml"  

Set fso=CreateObject("Scripting.FileSystemObject")   
Set WshShell = WScript.CreateObject("WScript.Shell")   
Set rFile = fso.OpenTextFile(Datei, 1)
Set wFile = fso.OpenTextFile(Datei, 8)
found = false

Do While rFile.AtEndOfStream <> True
     
    If InStr(rFile.Readline, Eintrag) <> 0 Then
    found = true
    End If
    
Loop

If found Then 

Else
    wFile.WriteLine Eintrag
    wFile.Close
End If

2.
Die fsx.cfg befindet sich in folgendem Pfad: "C:\user\username\appdata\roaming\microsoft\fsx\fsx.cfg"

der Script sieht nun so aus: jedoch Fehlermeldung: Zeile: 5
Zeichen 51
Fehler: Literalkonstante erwartet
Dim objShell,appdata
Set objShell = CreateObject("wscript.shell")  
appdata = objShell.ExpandEnvironmentStrings("%appdata%")  

Const Datei = (appdata & "\Microsoft\FSX\fsx.cfg")  
Const Eintrag = "AutogenDescriptionsFilename=AutogenDescriptions_EFRO.xml"  

Set fso=CreateObject("Scripting.FileSystemObject")   
Set WshShell = WScript.CreateObject("WScript.Shell")   
Set rFile = fso.OpenTextFile(Datei, 1)
Set wFile = fso.OpenTextFile(Datei, 8)
found = false

Do While rFile.AtEndOfStream <> True
     
    If InStr(rFile.Readline, Eintrag) <> 0 Then
    found = true
    End If
    
Loop

If found Then 

Else
    wFile.WriteLine Eintrag
    wFile.Close
End If

Kann mir jemand weiterhelfen?

aletri

Content-ID: 278573

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

Ausgedruckt am: 24.11.2024 um 08:11 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 28.07.2015 aktualisiert um 17:14:28 Uhr
Goto Top
Zeile 5: Die Klammern entfernen.

Schönheitsfehler:
Du willst ne Variable in eine Konstante laden?!
aletri
aletri 29.07.2015 um 08:38:31 Uhr
Goto Top
Hallo beidermachtvongreyscull

Besten Dank für deine Hilfe aber das Entfernen der Klammern
in Zeile 5 berwikt die gleiche Fehlermenldung?
Was mach ich falsch??

Gruss
aletri
beidermachtvongreyscull
beidermachtvongreyscull 29.07.2015 aktualisiert um 09:03:02 Uhr
Goto Top
Du versuchst eine Variable appdata in eine Konstante zu laden.
Konstanten nehmen nur feste Werte auf, keine variablen.

Definiere "Datei" als Variable. Dann sollte es klappen.
emeriks
emeriks 29.07.2015 um 10:25:23 Uhr
Goto Top
Hi,
rFile und wFile gleichzeitig auf die selbe Datei geht sowieso nicht.

1. Datei vollständig einlesen
2. Zeile suchen
3. Wenn nicht vorhanden Zeile einfügen
4. Datei speichern

....
dim FileText : FileText = rFile.ReadAll
rFile.Close

if Instr(FileText, Eintrag) = 0 then
  FileText = Replace(FileText, "[TERRAIN]", "[TERRAIN]" & vbnewline & Eintrag)  
  Set wFile = fso.CreateTextFile(Datei, True)
  wFile.Write FileText
  wFile.Close
end if
....

E.
aletri
aletri 29.07.2015 um 21:34:47 Uhr
Goto Top
Hallo emeriks

Wo meinst Du soll ich dein Script einfügen?
aletri
aletri 30.07.2015 um 14:08:31 Uhr
Goto Top
Besten Dank an alle für euren Einsatz!
Habe in der Zwischenzeit eine Lösung gefunden, hier der Script:

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

strNewLine = "AutogenDescriptionsFilename=AutogenDescriptions_EFRO.xml"  
strFileName = (appdata & "\Microsoft\FSX\fsx.cfg")  

Const FOR_READING = 1
Const FOR_WRITING = 2
strCheckForString = UCase("[TERRAIN]")  
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 Each strLine In arrLines
If (Left(UCase(LTrim(strLine)),Len(strCheckForString)) = strCheckForString) Then
objTS.WriteLine strLine
objTS.WriteLine strNewLine
else
objTS.WriteLine strLine
End If
next