• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

zoek/vervang in tekstbestand; waarden staan in tabel

Status
Niet open voor verdere reacties.

mariannevanh

Terugkerende gebruiker
Lid geworden
14 dec 2004
Berichten
2.085
Ik heb een datatekstbestand (gedcom-bestand) waarin ik gegevens wil veranderen d.m.v. zoek/vervang.
De te zoeken en de te vervangen teksten staan in een Excel-sheet (kolommen A en B). Het gaat over >100.000 wijzigingen.
Hoe kan ik in het tekstbestand (te groot is voor 1 sheet in Excel) deze wijzigingen doorvoeren.

Ik ben uiteraard niet gebonden aan Excel. Als ik dat in Notepad++ of ander programma gemakkelijker kan, dan doe ik dat.

Vriendelijke groet,
Marianne
 
Voor vandaag stop ik ermee, maar plaats een voorbeeldbestand in Excel, dan word je sneller en beter geholpen.
 
In het bestand zv-voorbeeld.xlsx heb ik enkele regels opgenomen met gegevens die gezocht moeten worden (kolom A) en die vervangen moeten worden (door kolom B). Behalve deze regels volgen er nog meer dan 100.000.
Het tekstbestand zou er kunnen uitzien als weergegeven in HM_20210507.ged.txt.
 

Bijlagen

  • zv-voorbeeld.xlsx
    695,4 KB · Weergaven: 51
  • HM_20210507.ged.txt
    141 bytes · Weergaven: 57
Code:
Sub Vervang_in_Textfile()

   With CreateObject("scripting.filesystemobject").opentextfile(ThisWorkbook.Path & "\HM_20210507.ged.txt")   'textfile openen
      s = .readall                                              'lezen
      .Close                                                    'sluiten
   End With

   a = Sheets("blad1").Range("A1").CurrentRegion                'je vervangingen
   For i = 1 To UBound(a)                                       '1 na 1 aflopen
      s = Replace(s, a(i, 1), a(i, 2), , , vbTextCompare)       'vervangen, hoofdletterongevoelig
   Next

   With CreateObject("scripting.filesystemobject").createtextfile(ThisWorkbook.Path & "\HM_20210507.gedNieuw.txt")   'nieuwe textfile
      .Write s                                                  'wegschrijven
      .Close                                                    'sluiten
   End With

End Sub
 
Laatst bewerkt:
Code:
Sub Vervang_in_Textfile()
   c00=ThisWorkbook.Path & "\HM_20210507.ged.txt"
   a = Sheets(1).cells(1).CurrentRegion                'je vervangingen

   With CreateObject("scripting.filesystemobject")
     s= .opentextfile(c00).readall   'textfile openen

     For i = 1 To UBound(a)                                       '1 na 1 aflopen
        s = Replace(s, a(i, 1), a(i, 2), , , vbTextCompare)       'vervangen, hoofdletterongevoelig
     Next

     .createtextfile(c00).Write s      'wegschrijven
   End With
End Sub
 
Laatst bewerkt:
ok!
- sheets(1) om taalonafhankelijk te werken.
- ik maakte een nieuwe tekstfile, jij overschrijft de oude. TS mag nu kiezen.
 
Die laatste krijg ik bij mij niet werkend. Waarschijnlijk omdat je .readall en .write in één filestystemobject gebruikt?
 
Klopt, ik heb de code aangepast.
 
Zo wordt alleen het bestand nog niet afgesloten;)

Edit:
Code:
Sub jvrr()
 c00 = ThisWorkbook.Path & "\HM_20210507.ged.txt"
 jv = Sheets(1).Cells(1).CurrentRegion
 
 With CreateObject("scripting.filesystemobject")
    With .OpenTextFile(c00)
       s = .ReadAll
       .Close
    End With
    
    For i = 1 To UBound(jv)
       s = Replace(s, jv(i, 1), jv(i, 2), , , vbTextCompare)
    Next
      
    With .CreateTextFile(c00)
      .Write s
      .Close
    End With
 End With
 
End Sub
 
Laatst bewerkt:
Dat is ook helemaal niet nodig.
In principe volstaat dit al:

Code:
Sub M_snb()
   c00="G:\OF\" & Dir("G:\OF\*.txt")

   With CreateObject("scripting.filesystemobject")
      c01 = .OpenTextFile(c00).ReadAll
      .CreateTextFile(c00).Write c01
    End With
End Sub
 
Ik kom er nog niet uit.
In het Excelbestand open ik het VBA-venster met Alt-F11 en kies ik voor Invoegen - Module en plak hierin de code uit #9. In regel 2 verander ik de naam van het tekstbestand, zodat er nu staat:
Code:
c00 = "E:\stamboom\Gedcom\20210508 kopie.ged"
Hierna sluit ik de module met het kruisje rechtsboven.
Vervolgens kies ik voor Uitvoeren - Macro starten. Gedurende enkele seconden moet ik wachten en dan zie ik het hoofdscherm van VBA.
Wat doe ik hierin fout?
 
Je doet niets fout, want het gewijzigde bestand '20210508 kopie.ged' staat nu op de harde schijf. Open het maar met Notepad.
 
Je doet niets fout, want het gewijzigde bestand '20210508 kopie.ged' staat nu op de harde schijf. Check maar met Notepad.
 
En omdat het forum niet correct werkt staat het er nu 2 keer.
 
Ik had de macro wel geplaatst in de VBA-sectie van zv-voorbeeld.xlsx, maar het bestand niet specifiek opgeslagen. Het stond gewoon als actief werkblad open. Na het uitvoeren van de macro zie ik dan (zoals ik schreef in #11) enkele seconden de muisaanwijzer als een cirkeltje en daarna kwam ik weer terug in de VBA-editor.
Wanneer ik de spreadsheet opsla met ingebouwde macro's (*.xlsm), krijg ik bij het uitvoeren dezelfde muisaanwijzer in de vorm van een cirkeltje te zien, maar nu niet voor enkele seconden, maar inmiddels ruim 40 minuten. Of er daadwerkelijk iets gebeurt, moet straks blijken. Ik neem aan dat de macro nu netjes aan het werk is.
 
en een aangepaste versie van mijn eerste voorzet ?
Code:
Sub Vervang_in_Textfile()

   With CreateObject("scripting.filesystemobject").opentextfile("E:\stamboom\Gedcom\20210508 kopie.ged")   'textfile openen
      s = .readall                                              'lezen
      .Close                                                    'sluiten
   End With

   a = Sheets("blad1").Range("A1").CurrentRegion                'je vervangingen
   For i = 1 To UBound(a)                                       '1 na 1 aflopen
      s = Replace(s, a(i, 1), a(i, 2), , , vbTextCompare)       'vervangen, hoofdletterongevoelig
   Next

   With CreateObject("scripting.filesystemobject").createtextfile("E:\stamboom\Gedcom\20210508 kopie Nieuw.ged")   'nieuwe textfile
      .Write s                                                  'wegschrijven
      .Close                                                    'sluiten
   End With

End Sub
 
Jouw Excel bestand is sowieso onbegrijpelijk groot.

Bij het opslaan wordt de macro niet geactiveerd. De tijdsduur ligt dus niet aan de macro.

Kijk eens naar de bijlage:
 

Bijlagen

  • __vervang_snb.xlsb
    15,2 KB · Weergaven: 28
Laatst bewerkt:
De macro heeft zijn werk gedaan. Bedankt allemaal voor het meedenken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan