Regel opzoeken in tekstfile

Status
Niet open voor verdere reacties.

zyzyxy

Gebruiker
Lid geworden
2 jun 2009
Berichten
12
Hey,

Zit met iets waar ik mijn tanden op stukbijt. Eerst de code tot dusver:

Sub ReadFileLineByLine()

path = "C:\01000001.txt"

Const ForReading = 1
Const TristateUseDefault = -2
Dim oFS
Dim oFile
Dim oStream
Dim MyStr
Dim sRecord

Set oFS = CreateObject("Scripting.FileSystemObject")
Set oFile = oFS.GetFile(path)
Set oStream = oFile.OpenAsTextStream(ForReading, TristateUseDefault)

Do While Not oStream.AtEndOfStream
sRecord = oStream.readLine
If sRecord = "[OPMERKING] TEST" Then GoTo Schrijven
Loop

Schrijven:

MyStr = Left(sRecord, 11)
oStream.Close
Set oFS = Nothing
Set oFile = Nothing
MsgBox MyStr

End Sub


Het probleem is het volgende: de regel "If sRecord = "[OPMERKING] TEST" Then GoTo Schrijven" klopt niet helemaal.
Waar "TEST" staat kan eender welke andere string staan. De bedoeling is dat gezocht wordt naar "[OPMERKING]" met
eventueel nog iets er achter ( wat ook niet altijd het geval is, soms staat er niets achter ), en dat dan d.m.v.
de variabele MyStr het aantal karakters wordt teruggebracht naar 11. Vervolgens - en dat heb ik ook nog niet voor
elkaar gekregen - moet MyStr de originele lijn overschrijven.

Graag hulp, tx,
Zyzyxy
 
Code:
Sub vervang()
  Open "C:\01000001.txt" For Input As #1
    c0 =input (LOF(1),#1)
  Close #1

  Open "C:\01000001.txt" For Output as #1
     print #1, replace(c0,"zoektekst",mid(c0,instr([COLOR="Red"]c0,[/COLOR]"zoektekst")-11,11))
  Close #1
End Sub
 
Laatst bewerkt:
De regel print #1, replace(c0,"zoektekst",mid(c0,instr("zoektekst")-11,11)) wordt rood gemaakt als ik de code knip en plak in de vba-editor. Zit dus blijkbaar een foutje in?
 
We staan al een heel eind verder, maar misschien heb ik het niet helemaal correct uitgelegd. Het is de bedoeling dat de "zoektekst" uit het voorbeeld ( bij mijn voorbeeld dus "[OPMERKING]") blijft staan ( nu is ie helemaal weg ). Enkel de karakters die achter de string "[OPMERKING]" staan ( kunnen letters en/of cijfers zijn van variabele lengte ) zouden moeten verdwijnen, de string zelf zou moeten blijven staan.
 
Als je de principes van replace en Mid begrijpt kun je dat zelf.
 
Sorry, ben er een hele tijd mee bezig geweest maar kom er niet uit. De code doet altijd iets anders dan ik verwacht. Ben een wiskundige 0, weet het :eek:
 
Het lukt mij écht niet. Ik dacht dat dit forum bedoeld was voor mensen die in vba niet zo goed zijn en daarom hulp vragen. Heb ik mij vergist?
 
Het lukt mij écht niet.

Je geeft dan ook niet de code waar je mee aan het proberen bent. Of de specifieke problemen die je ondervindt.

Anyway, omdat het goed weer is.

Code:
Sub vervang()

    sZoektekst = "[OPMERKING]"

    Open "C:\01000001.txt" For Input As #1
    c0 = Input(LOF(1), #1)
    Close #1

    Open "C:\01000001.txt" For Output As #1
    Print #1, Replace(c0, Mid(c0, InStr(c0, sZoektekst) + Len(sZoektekst), InStr(InStr(c0, sZoektekst), c0, vbCr) - InStr(c0, sZoektekst) - Len(sZoektekst)), "")
    Close #1
    
End Sub

Wigi
 
Hey,

Sorry wegens de late reactie, had eigenlijk op niets meer gehoopt. Ik ben zelf niet meer met code op de proppen gekomen omdat de reply van snb op mijn eerste poging al een heel stuk korter was.
Ben daarna wat met zijn code aan het experimenteren gegaan, maar raakte er niet uit. Dit werkt in elk geval, Tx a lot!

Ik ga mijn geluk proberen een beetje te rekken ( en hoop dus dat het "daar" ( waar "daar" dan ook mag zijn ) nog steeds mooi weer is );)

Het bestand is ondertussen 'bestanden" geworden en ze zijn in de map "C:\DATA" gezet.

Had het volgende uitgedokterd maar dat werkt niet:

Sub vervang()
Dim i
sZoektekst = "[OPMERKING]"


With Application.FileSearch
.NewSearch
.LookIn = "C:\DATA"
.Filename = "*.txt"

If .Execute > 0 Then
For i = 1 To .FoundFiles.Count

Open .FoundFiles(i) For Input As #1
c0 = Input(LOF(1), #1)
Close #1

Open .FoundFiles(i) For Output As #1
Print #1, Replace(c0, Mid(c0, InStr(c0, sZoektekst) + Len(sZoektekst), InStr(InStr(c0, sZoektekst), c0, vbCr) - InStr(c0, sZoektekst) - Len(sZoektekst)), "")
Close #1

Next i
End If
End With

End Sub
 
Code:
Sub vervang()
  c0 = "zoektekst"
  With Application.FileSearch
    .LookIn = "C:\DATA"
    .Filename = "*.txt"

    For i = 1 To .execute
      Open .FoundFiles(i) For Input As #1
        c1 = Input(LOF(1), #1)
      Close #1

      Open .FoundFiles(i) For Output As #1
         Print #1, join(filter(split(replace(c1,c0,c0 & vbCrLf & "#"),vbCrLf),"#",false),vbCrlf)
      Close #1
    Next 
  End With 
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan