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

CSV importeren en harde returns verwijderen

Status
Niet open voor verdere reacties.

sannevanzijl

Gebruiker
Lid geworden
10 dec 2013
Berichten
17
Hallo allemaal

Ben even een tijdje weggeweest, maar hier ben ik weer met een issue waar ik niet uit kom.

Ik heb een groot aantal csv bestanden. Deze moet ik importeren in Excel. Tot zover geen probleem.
Maar een flink aantal bestanden bevat velden waarin harde returns zitten. Als ik deze bestanden inlees, worden de regels afgebroken en lopen de records over meerdere regels heen.
Een van de bestanden heeft daardoor zelfs 6 maal zoveel regels gekregen, waardoor het bijna te groot is om te verwerken.
Nu wil ik graag een stukje vba schrijven waarmee ik alle harde returns uit de csv kan slopen. Dat moet dan volgens mij voordat ik de csv definitief importeer in excel.

Ik dacht het zo te doen:

- Textpad of word openen vanuit de procedure en daar het bestand opvragen
- In textpad/word de harde returns verwijderen
- het bestand opslaan
- Het aangepaste bestand importeren in Excel

Maar ik kom er niet uit hoe ik dat via VBA moet doen.
Iemand suggesties?

Dank!
 
Zo is het uiteraard geen bestand die voldoet aan de specificaties voor een CSV bestand.
Heb je eerst al gekeken of het mogelijk is om dat CSV bestand correct aangeleverd te krijgen?
 
Ok, ik vind dat de leverancier een correct bestand aan hoort te leveren, maar goed.
Kun je een voorbeeld van zo'n bestand plaatsen?
 
Hoi Edmoor, ja in basis heb je gelijk. Maar dat gaat er niet van komen. Dus moet ik het generiek oplossen binnen code.
Daarnaast is de info in de betreffende csv vertrouwelijk dus die mag ik hier niet posten.

Nu ik heb al wat verder gespeurd en wat ik moet doen is het volgende:

1. Ik heb een trajectstappen.csv en die kopieer ik naar een nieuw bestand trajectstappen_mod.csv
2. Ik moet de gehele inhoud van trajectstappen_mod.csv in een variabele laden
3. Op de variabele moet ik de volgende zoek & vervang opdrachten doen:
3a. Vervang """" & Chr(13) & """{" door "@@@"
3b. Vervang Chr(13) door "" [niets dus]
3c. Vervang "@@@" door """" & Chr(13) & """{"
4. schrijf inhoud gewijzigde variabele naar trajectstappen_mod.csv

Daarna kan ik de csv bestanden wel correct importeren.

Nu heb ik me suf zitten zoeken maar ik kom er niet uit welke combinaties code ik nu moet gebruiken.

Dit is wat ik tot zover heb:

Code:
Sub CleanCSV()
Dim PathName As String
Dim FileSource As String
Dim FileDest As String
Dim FSO As FileSystemObject
Dim contents As Long
    
    PathName = Sheets("sys_info").Range("B2").Value
    FileSource = PathName & Sheets("sys_info").Range("B3").Value
    FileDest = PathName & Sheets("sys_info").Range("B4").Value
    
    FileCopy FileSource, FileDest
    
    Open FileDest For Output As #1

    ' WAT NU?
    
    contents = Replace(contents, """" & Chr(13) & """{", "@@@")
    contents = Replace(contents, Chr(13), "")
    contents = Replace(contents, "@@@", """" & Chr(13) & """{")
    
    'EN DAN?

End Sub
 
Nevermind :)

Ik ben eruit. Met deze code is mijn probleem opgelost!

Code:
Option Explicit
Public g_strVar As String

Function ImportTextFile(strFile As String) As String
    Open strFile For Input As #1
    ImportTextFile = Input$(LOF(1), 1)
    Close #1
End Function

Sub CleanCSV()
Dim PathName As String
Dim FileSource As String
Dim FileDest As String
Dim contents As String
Dim fNum
    
    PathName = Sheets("sys_info").Range("B2").Value
    FileSource = PathName & Sheets("sys_info").Range("B3").Value
    FileDest = PathName & Sheets("sys_info").Range("B4").Value
    
    FileCopy FileSource, FileDest
    
    g_strVar = ImportTextFile(FileSource)

    contents = g_strVar
    contents = Replace(contents, """" & vbCrLf & """{", "@@@")
    contents = Replace(contents, vbCrLf, "")
    contents = Replace(contents, "@@@", """" & vbCrLf & """{")
    
    fNum = FreeFile()
    Open FileDest For Output As fNum
    Print #fNum, contents
    Close #fNum

End Sub
 
of

Code:
Sub M_snb()
   sn=  Sheets("sys_info").Range("B2:B4)
   c00="""" & vbcrlf & """{"
  
   with createobject("scripting.filesystemobject")    
     .createtextfile(sn(0) & sn(1)).write replace(replace(replace(.opentextfile(sn(0) & sn(2)).readall,c00,"~"),vbcrlf,""),"~",c00)
   end with
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan