• 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.

Onmogelijke klus?

Status
Niet open voor verdere reacties.

jansm

Gebruiker
Lid geworden
2 apr 2014
Berichten
421
Specialisten,
het lukt mij niet om een bestaande txt_bestand op een juiste manier in te lezen. Volgens mij is het bestand niet goed weggeschreven, kolommen zijn niet eenduidig gescheiden.
Het bestand bestaat uit 8 kolommen. Rec#, Naam, Jaartal, Plaats, Jaartal, Plaats, getal, getal.
De superscript 3-tjes horen er volgens mij niet of zijn de scheidingstekens.
Wie kan voor mij een vba-tje schrijven om de gegevens in 8 kolommen te plaatsen?
Mvg Jansm

Bekijk bijlage TEST1.rar
 
Wat als je eerst gewoon een "search&replace" doet en alle "3"tjes weer vervangt door "|". De file zelf lijkt verder prima consistent.
 
Toch nog een ander probleem. Ik wil de kolom waarin persoonsnr + achternaam staat scheiden in 2 kolommen. Ik kan in het txt-bestand handmatig een | plaatsen maar voor 5000+ regels is dat te gek. Hoe kan ik dat aanpakken?

Bekijk bijlage Test_Huw1.txt
 
Lijkt mij een kwestie van een programmeerbare editor gebruiken die regular expressions aan kan.
Als ik je voorbeeld bestand bekijk betekent het:
|<getal><spatie>
vervangen door:
|<getal>|

Zou in mijn favoriete programmeerbare editor (=MicroEmacs) op de volgende macro neerkomen:

Code:
add-mode MAGIC ; Maak gebruik van regular expressions mogelijk
beginning-of-file ; Ga naar het begin van het bestand
*loop
!force search-forward "\|[0-9]+ " ; Zoek naar een pipe-line teken, minstens 1 cijfer en een spatie
!if &seq $status TRUE ; Indien gevonden...
      delete-previous-character ; Haal de spatie weg
      insert-string "|" ; Voeg een pipe-line teken toe
      !goto loop ; Spring terug naar het label loop, dus weer naar het zoek-gedeelte etc.
!endif

Losgelaten op je voorbeeld-bestand levert het op:
Code:
Huissen, Huwelijken, 1660 - 1900
Rec|Persoonsnr. en Man        |Persoonsnr en Vrouw       |Huwelijk  |Plaats
   1|2896| HAAS, Theodorus de |2897|JANSEN, Hendrina    |    |         |   
   2|1|BEERNINGH, Jan         |2|VERHAAR, Elisabeth     |1734|Huissen  |
   3|4|BEERNING, Hendrik      |5|SLUITER, Hendrina      |1697|Huissen  |
   4|16|BEERNINGH, Hend       |17|PENNINGH, Christina   |    |         |
   5|22|BERENS, Hermen        |23|HERMSEN, Jenneken     |    |         |
   6|27|BEERNS, Ruth          |28|WOLTERS, Gertruit     |1725|Huissen  |
   7|30|BEERNS, Winant        |31|BEERNS, Maria         |1682|Huissen  |
   8|34|BEEK, Jan van         |35|STEENHOF, Gertrhuij   |    |         |
   9|37|BEERNS, Jan           |38|SEEVENHOVEN, Gerriken |1682|Huissen  |
  10|40|BEERNS, Cornelis      |41|BASTIAENS, Anna       |1680|Huissen  |
  11|44|BEERNS, Anthoni       |45|PETERS, Joanna        |1705|Huissen  |
  12|52|BEERNS, Jacob         |53|MUNSTER, Anna van     |1707|Huissen  |
  13|51459|BERENDS, Henricus  |60|STOKMAN, Dorothea     |1796|Huissen  |
  14|71|BEERNTS, Peter        |72|KERCKHOF, Christina va|    |         |
  15|78|BEERNTS, Cornelis     |79|COENDERS, Bernardina  |1707|Huissen  |
  16|81|BEERNTS, Frans        |82|VIERBOOM, Guida       |    |         |
  17|90|BRANDS, Derk          |91|RUTJES, Anna-Maria    |1797|Huissen  |

NB: In je voorbeeld-bestand had je blijkbaar al wat gewijzigd aan de regel met Theodorus de Haas, vandaar dat " 1|2896| HAAS, Theodorus de " ongewijzigd is gebleven, incl. de spatie achter het eerste | teken. Zie dat Hendrina Jansen, op dezelfde regel, wel aangepast is.

Tijs.
 
Laatst bewerkt:
met VBA:

Code:
Sub M_snb()
   c00 = "G:\OF\test_huw1.txt"
   
   With CreateObject("scripting.filesystemobject")
        c01 = Replace(Application.Trim(.opentextfile(c00).readall), " |", "|")
        For j = 1 To 60000
           c01 = Replace(c01, j & " ", j & "|")
        Next
        .createtextfile(c00).write c01
    End With
End Sub

Maar als je het bestand in Excel inleest kun je met texttocolumns hetzelfde voor elkaar krijgen.
 
Hallo dnties,
bedankt voor jouw reactie maar de oplossing gaat mijn pet te boven, sorry.

Snb, jouw oplossing werkt perfect..... op mijn test-bestandje. Op het originele bestand (ca 6000 regels) krijg ik de melding 'rode button met wit kruis, en dan 400'. Kan niet vinden waar het aan ligt. Het test bestandje is gemaakt door het merendeel van de oorspronkelijke regels te deleten
 
Kontroleer of je de naam van het bestand wel goed hebt ingevoerd c00="..."
 
gisteren deed de test-file het wel, nu ook niet meer. Ga eerst bij mezelf te raden. Je hoort nog van mij snb
 
snb,
heb getest. Test-file doet het (17 regels).
Ik heb van de oorspronkelijke txt-bestand regel 18 onderaan de test-file geplakt, zodat deze dus uit 18 regels bestaat: doet het. Zo geplakt tot bestand bestaat uit 19, 25, 50 100 regels: resultaat - werkt.
Daarna tot 1000 regels geplakt. Dan krijg ik dezelfde foutmelding als ik gisteren gemeld heb. Het aantal regels vermindert met steeds 100 regels totdat de macro weer werkt. Zo blijkt dat ergens tussen de 440 en 445 regels de fout optreedt. Dan zit ik ergens rond de 24000 tekens. Zie jij de oorzaak van het probleem?
 
kopieer die regels 430 tot 450 en zet in een apart bestandje hier neer.
 
de regels 430-450 geplakt in het test-bestand geven geen problemen (totaal dan 37 regels). Kan in mijn ogen dus niet specifiek liggen aan de regels 430-450
 
verwijder de application.trim opdracht:

Code:
Sub M_snb()
   c00 = "G:\OF\Test_450R.txt"
   
   With CreateObject("scripting.filesystemobject")
        c01 = Replace(.opentextfile(c00).readall, " |", "|")
        For j = 1 To 60000
           c01 = Replace(c01, j & " ", j & "|")
        Next
        .createtextfile(c00).write c01
    End With
End Sub
 
Werkt!
zou je de code kunnen aanpassen zodat het bestand wegschrijft met de toevoeging ......BEWERKT in de bestandsnaam?
DANK
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan