FreAKAzoid skrev:
> Jeg vil høre om der er nogen der kan hjælpe mig med hvordan jeg kan ændre
en
> linie midt i en fil, kun udfra at linien starter med "name"?
>
> MVH
> Hans-Henrik Ravn
At du skriver spørgsmålet herind må jo betyde at du ikke fik mit svar til
den e-mail du sendte... eller kunne du bare ikke bruge det til noget?
Jeg poster den i hvert fald lige igen:
Hans-Henrik Ravn skrev:
> Kan man på en eller anden måde ændre koden, så man f.eks kan erstatte en
linie midt i filen, der feks starter med "open"??
>
> MVH
> Hans-Henrik Ravn
Ja - det vil jeg da mene man kan!
Meen, det er lidt mere kompliceret en den sub-rutine du skulle bruge før...
Førhen lavede den bare altid første linie om, men nu søger den efter noget
og derved er det ikke sikkert at den finder det... derfor har jeg lavet det
til en function, der giver True hvis linien blev udskiftet - og False hvis
den ikke gjorde. Foresten så er den kun lavet, så det er den først fundne
linie der bliver udskiftet... ikke andre!
Foresten så har jeg lavet den sådan at selvom man søger efter "open" finder
den også linier med "OPEN" i...
Sådan her bruges den (f.eks.):
Private Sub Form_Load()
If ChangeLine("C:\fil.txt", "OPEN=PRG.EXE", "Open=Program.exe") Then
MsgBox "Juhuu! Det virkede..."
Else
MsgBox "Øv... ""OPEN=PRG.EXE"" blev ikke fundet..."
End If
End Sub
En fil der indeholder følgende:
[autorun]
Icon=ikon.ico
open=prg.exe
.... vil komme til at indeholde:
[autorun]
Icon=ikon.ico
Open=Program.exe
Foresten så vil jeg lige give en lille "advarsel"... jeg har ikke testet
den, så der er en lille risiko for der fejl i...
.... du kan jo selv teste den, hvis du gider.
Nå ja: En lille ekstra-"smart"-funktion er at du kan bestemme du vil søge
efter en hel linie (ikke kun starten) ved at kalde den sådan her:
ChangeLine("C:\fil.txt", "OPEN=PRG.EXE" & vbCrLf, "Open=Program.exe")
.... der er kædet et linieskift efter "OPEN=PRG.EXE".
Dvs. nu finder den ikke linier som f.eks. "open=prg.exe2" men kun
"open=prg.exe".
Og så vil jeg lige spørge: Var det disse funktioner den skulle have?
Nå, men nu har du vist læst længe nok (selvom jeg kunne skrive en masse
mere)... så her er koden:
Private Function ChangeLine(Filename As String, SearchFor As String,
ChangeLineTo As String) As Boolean
Dim File As String
Dim Pos1 As Long
Dim Pos2 As Long
Open Filename For Input As #1
File = Input(LOF(1), #1)
Close #1
Pos1 = InStr(File & vbCrLf, vbCrLf & SearchFor, vbTextCompare)
If Pos1 = 0 Then
ChangeLine = False
Else
Pos2 = InStr(Pos1 + 1, File, vbCrLf, vbBinaryCompare)
If Pos2 = 0 Then
File = Left(File, Pos1 - 1) & ChangeLineTo & vbCrLf
Else
File = Left(File, Pos1 - 1) & ChangeLineTo & Mid(File, Pos2)
End If
Open Filename For Output As #1
Print #1, File;
Close #1
ChangeLine = True
End If
End Function
Du må foresten meget undskylde at jeg ikke udkommenterede koden, men hvis du
gerne vil have den udkommenteret - så skriv bare en mail til mig!
- Bjarke Walling Petersen