• 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. Hoe zoeken naar CR/LF

Status
Niet open voor verdere reacties.

mariannevanh

Terugkerende gebruiker
Lid geworden
14 dec 2004
Berichten
2.085
Ik heb een tekstbestand waarop ik een - meermalen in dit forum besproken - macro wil loslaten. Het Excelbestand met de macro staat in de bijlage.

Hoe geef ik in dit bestand aan dat er moet worden gezocht naar CR/LF? De door mij gebruikte
Code:
\r\n
werkt niet.

Vriendelijke groet,
Marianne
 

Bijlagen

  • zv_hm_20220223.xlsm
    16,5 KB · Weergaven: 12
Laatst bewerkt:
Dat kan met een druk op een knop in Notepad of Notepad++.
Zoek en Vervang (CTRL-H)
Zoek: \r\n
Vervang: Leeg laten.
Dan de knop Alles vervangen.
 
Dat kan met een druk op een knop in Notepad of Notepad++.
Zoek en Vervang (CTRL-H)
Zoek: \r\n
Vervang: Leeg laten.
Dan de knop Alles vervangen.

Dankjewel voor je reactie.
Die optie ken ik. Maar in het bijgevoegde Excelbestand staat als voorbeeld één regel. Het werkelijke bestand bestaat uit 1.500 regels te zoeken/vervangen. Daarom wil ik dit graag via deze weg uitvoeren.
 
Wat je wilt is precies wat Notepad of Notepad++ doet, al zijn het 10.000 regels.
Met Notepad++ kan je zelfs meerdere van die bestanden tegelijk openen en het vervangen in al die bestanden ineens laten uitvoeren, ook weer met 1 druk op een knop.
Ik zie dus het nut niet van het maken van een lastige macro er voor.
 
De macro heb ik al (zit in het bestand dat ik reeds meestuurde). Voor Notepad++ zou er dan een macro moeten worden gemaakt.
Het zoek-/vervangproces van reguliere tekst in de huidige Excel-macro gaat ook prima, maar nu wil ik dus graag zoeken (en vervangen) naar extra tekens (CR/LF).
 
Met Notepad++ is het 1 druk op de knop, geen macro voor nodig.
Als ik meer tijd heb en niemand me voor is zal ik eens naar je Excel macro kijken.
 
Je voorbeeld link zie ik nergens \r\n in staan.
Ook niet als ik die inhoud van die pagina kopiëer en plak in Kladblok.
Overigens kan Excel maximaal 1.048.576 regels aan in een werkblad.
 
Code:
Sub M_snb()
  sn = Blad1.Cells(1).CurrentRegion
   
  With CreateObject("scripting.filesystemobject")
    c00 = .opentextfile("D:\stamboom\gedcom\tree 22022022 2038.ged").readall

    For j = 1 To UBound(sn)
      c00 = Replace(c00, sn(j, 1), sn(j, 2), , , 1)
    Next

    .createtextfile("D:\stamboom\gedcom\tree 22022022 2038x.ged").write Replace(c00, vbCrLf, "")
  End With
End Sub

Een txt bestand zonder regels wordt 1 grote brij aan letters.
Wat is de zin daarvan ?
 
Laatst bewerkt:
Ik zie nu dat ik de verkeerde versie van mijn Excelbestand heb meegestuurd. De macro is wel dezelfde (op de bestandsnamen na). De juiste versie staat nu in het openingstopic.
@edmoor, de code \r\n staat in het Excelbestand.
Het bestand oud.ged wordt niet in geopend in Excel, dus is niet gebonden aan de maximumgrootte.
@snb, het blijft een bestand met regels. De door @edmoor genoemde zoek/vervang diende wellicht als voorbeeld. De CR/LF-codes blijven gewoon staan.
 
een willekeurig fragment uit oud.ged
Code:
1 BIRT
2 PLAC Domburg
3 _LOC @L32776@
1 DEAT
2 DATE 12 AUG 1946
2 PLAC Aagtekerke
2 SOUR @S696@
zou moeten resulteren in nieuw.ged
Code:
1 BIRT
2 PLAC Domburg
3 _LOC @L32776@
1 DEAT
2 DATE 12 AUG 1946
2 PLAC Aagtekerke
3 _LOC @L32774@
2 SOUR @S696@
 
Wat heeft je laatste post met je vraag te maken ?
Dat gaat toch helemaal niet over CR/LF ?

Hoe kun je de tesktreeks "2 PLAC Aagtekerke\r\n2" in een .ged bestand laten vervangen als, gezien jouw laatste post de tekstreeks "2 PLAC Aagtekerke\r\n2" in het .ged bestand niet voorkomt ?

Je bedoelt heel iets anders dan wat je schrijft.
De oplossing:

Code:
Sub M_snb()
   sn = Blad1.Cells(1).CurrentRegion
   
   With CreateObject("scripting.filesystemobject")
      c00 = .opentextfile("D:\stamboom\gedcom\tree 22022022 2038.ged").readall
      For j = 1 To UBound(sn)
         c00 = Replace(c00, sn(j, 1), sn(j, 2), , , 1)
      Next
      .createtextfile("D:\stamboom\gedcom\tree 22022022 2038x.ged").write Replace(c00, "_", vbCrLf & "_")
   End With
End Sub
 
Laatst bewerkt:
Wat heeft je laatste post met je vraag te maken ?
Dat gaat toch helemaal niet over CR/LF ?

Hoe kun je de tesktreeks "2 PLAC Aagtekerke\r\n2" in een .ged bestand laten vervangen als, gezien jouw laatste post de tekstreeks "2 PLAC Aagtekerke\r\n2" in het .ged bestand niet voorkomt ?

Dat is nu juist de vraag. "\r\n" is de weergave van CR/LF in Notepad++. Dus als in oud.ged staat:
2 PLAC Aagtekerke, gevolgd door een CR/LF en de volgende regel begint met 2, dan moet er na 2 PLAC Aagtekerke een regel worden tussengevoegd met 3 _LOC @L32774@.

Moet ik in plaats van \r\n een andere codering plaatsen? ^M of ^P geven ook niet het gewenste resultaat.
 
Laatst bewerkt:
Zet in A1:

2 PLAC Aagtekerke

Zet in B1

2 PLAC Aagtekerke~3 _LOC @L32774@~2

Gebruik dan

Code:
Sub M_snb()
   sn = Blad1.Cells(1).CurrentRegion
   
   With CreateObject("scripting.filesystemobject")
      c00 = .opentextfile("D:\stamboom\gedcom\tree 22022022 2038.ged").readall
      For j = 1 To UBound(sn)
         c00 = Replace(c00, sn(j, 1) & vbCrLf & "2", replace(sn(j, 2),"~",vbcrlf), , , 1)
      Next
      .createtextfile("D:\stamboom\gedcom\tree 22022022 2038x.ged").write c00
   End With
End Sub

NB. Gooi Notepad++ and VBA niet door elkaar.
Je moet beslissen of je de ene tool wil gebruiken of de andere, met ieder hun eigen termen en suntaxis.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan