11. november 2003 - 12:20Der er
16 kommentarer og 1 løsning
Søge efter flere værdier i en ini fil??
Hejsa
Jeg håber I kan hjælpe med denne...
Jeg har en ini fil som indeholder en masse punkter. Jeg vil gerne trække 5 "nøgler" ud af denne fil. Det skal foregå i "ren" VBScript og jeg kan altså ikke benytte asp eller Visual Basic til det.
Inifilen ser (nogenlunde) således ud:
Section begin Name = "ABC" Value = "123" Section end
Section begin Name = "ABCD" Value = "123.ABC" Section end
...
Der er mellem 20 og 50 sektioner i filen.
Nu er spørgsmålet... Jeg vil gerne kunne søge efter et "Name" og trække "Value" ud. Altså søge på ABC og hive "123" ud. Hvordan gøres dette i VBScript?
sSearchString = InputBox("Enter name to search for") If sSearchString = "" Then WScript.Quit(1) End If
Set fso = Wscript.CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextfile(sINIFileName, 1)
sRes = ""
Do sCurLine = f.ReadLine If InStr(sCurLine, "Name = """ & sSearchString & """") > 0 Then sCurLine = f.ReadLine aValue = Split(sCurLine, "=") sRes = Trim(Replace(aValue(1), """", "")) Exit Do End If Loop Until f.AtEndOfStream
f.Close Set f = Nothing Set fso = Nothing
If sRes <> "" Then MsgBox "Value of '" & sSearchString & "': " & sRes Else MsgBox "'" & sSearchString & "' not found!" End If
sSearchString = InputBox("Enter name to search for") If sSearchString = "" Then WScript.Quit(1) End If
Set fso = Wscript.CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextfile(sINIFileName, 1)
sRes = ""
Do sCurLine = f.ReadLine If InStr(sCurLine, "Name = """ & sSearchString & """") > 0 Then sCurLine = f.ReadLine If InStr(sCurLine, "Value") = 1 Then aValue = Split(sCurLine, "=") sRes = Trim(Replace(aValue(1), """", "")) Exit Do End If End If Loop Until f.AtEndOfStream
f.Close Set f = Nothing Set fso = Nothing
If sRes <> "" Then MsgBox "Value of '" & sSearchString & "': " & sRes Else MsgBox "No value for '" & sSearchString & "'!" End If
Option Explicit dim Filsystem, stream,tekst, navn, fundet Set FilSystem=CreateObject("Scripting.FileSystemObject") Set stream=filsystem.openTextFile("Testfil.txt") navn=InputBox("Indlæs navn: ") while not stream.AtEndOfStream tekst=stream.readline() If Instr(tekst,"""" & navn & """")>0 then tekst=stream.readline MsgBox tekst fundet=true end if wend if not fundet then MsgBox "Navnet findes ikke" end if stream.close set stream=nothing
nmh>> Ja, det er klart. Jeg bad jo også bare om værdien. Den skal såmænd bare renses og bruges senere i scriptet. Men det er klaret. Jeg har dog vlagt at bruge adams løsning i stedet, så han skulle egentlig have haft dine point :-) Men det finder jeg selv ud af med ham. Tak for din hurtige hjælp i dag. Jeg håber jeg kan trække lidt på dig en anden god gang.
InStr(sCurLine, "Value") = 1 tjekker om næste linie (efter Name = "...) er en tilhørende Value-line (dvs. om linien _starter_ med 'Value'). Det kræver dog at Name, Value parret står præcis som du skrev i dit spm. Gør de det i din INI-fil? (dvs. uden foranstående mellemrum og med stort V)
InStr(sCurLine, "Value") > 0 vil virke i de fleste tilfælde, men fejle hvis en section fejlagtigt er defineret fx med en kommentar således:
Section begin Name = "ABC" 'remember to write the Value on this line... Section end
Hvis du kan stole på at INI-filen ikke har sådanne sections kan du godt nøjes med InStr .... > 0
Ellers prøv dette i stedet: If InStr(Trim(LCase(sCurLine), "value")) = 1 Then
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.