Import von CSV, Datensatz geht über mehrere Zeilen

11/11/2009 - 03:27 von Leuenberger Christian | Report spam
Guten Tag

ich muss ein Text Files in Access XP importieren,
leider hat das CSV eine Struktur die nicht direkt importiert werden kann.

Frage 1

Felder sind , getrennt. Das Ende eines Datensatzes wird durch ;
markiert. Der Datensatz geht über mehrere Zeilen.

Muster vom CSV File:

"KAA1_EN0AALA","INDICATION",,,"I1","E","N","NOC",,"0","N","N","N","N","N",,,,,
,,,,,,,,,,,,,"N","D",,,,,,,,,,,,,,,,,,,,,"INNNNN","ANNNNN",,,,,"LNNNNN",
"INNNNN",,,,,,,,,,,,,,,,,,,,,,"I","I","I","I",,,,,,,,,,,,,,,,,,,,,,,"A",,,"N",
,,,,,,,,,,,,,,,,"SPO",,"0","15",,,, ;
"KAA1_EN0AALW","INDICATION",,,"I1","E","N","NOC",,"0","N","N","N","N","N",,,,,
,,,,,,,,,,,,,"N","D",,,,,,,,,,,,,,,,,,,,,"INNNNN","WNNNNN",,,,,"LNNNNN",
"INNNNN",,,,,,,,,,,,,,,,,,,,,,"I","I","I","I",,,,,,,,,,,,,,,,,,,,,,,"A",,,"N",
,,,,,,,,,,,,,,,,"SPO",,"1","15",,,, ;


Frage 2
Am Anfang und Ende des CSV Files steht ein Begleittext, denn ich für den
Import entfernen muss. Schön wàre es, wenn ich dies automatisieren kann.

Begleittext
DATA
Datensàtze wie Muster oben
END;
Begleittext


Mein Lösungsversuch (Begleittext von Hand entfernt)
Ich lese das CSV und schreibe ein neues File:

Function Test()

Dim F As Integer
Dim TextZeile As String
Dim TextNew As String

F = FreeFile
n = 0
Open "d:\xxx\en\Kopie von KLS_LU_CAT.TXT" For Input As F
Do While Not EOF(F)

Line Input #F, TextZeile
'Zeichen suchen
If InStr(1, TextZeile, ";") > 0 Then
TextNew = TextNew & TextZeile
Else
TextNew = TextNew & TextZeile
End If
Loop
Close F
'Vor dem Replace letztes ; entfernen
txt_WriteAll "d:\xxx\en\von KLS_LU_CAT.TXT", _
Replace(Left(TextNew, Len(TextNew) - 1), ";", vbNewLine)
End Function

Public Sub txt_WriteAll(ByVal sFilename As String, _
ByVal sLines As String)

Dim F As Integer

' Datei zum Schreiben öffnen
' Achtung: bisheriger Inhalt wird gelöscht!
F = FreeFile
Open sFilename For Output As #F
Print #F, sLines
Close #F
End Sub

Kann man hier noch irgendwas verbessern.

Sonst bleibt nur noch die Frage 2

Gruss
Christian
PS: Infolge Nachtschicht am Tag nicht anwesend
 

Lesen sie die antworten

#1 Kerstin Schiebel
11/11/2009 - 16:53 | Warnen spam
Hallo Christian,

ich würde die gesamte Datei in einem Rutsch einlesen und danach mit Split
(Trennzeichen ';')
die einzelnen Datensàtze in ein eindimensionales Feld schaufeln.

Gruß
Kerstin

"Leuenberger Christian" schrieb im Newsbeitrag
news:
Guten Tag

ich muss ein Text Files in Access XP importieren,
leider hat das CSV eine Struktur die nicht direkt importiert werden kann.

Frage 1

Felder sind , getrennt. Das Ende eines Datensatzes wird durch ; markiert.
Der Datensatz geht über mehrere Zeilen.

Muster vom CSV File:

"KAA1_EN0AALA","INDICATION",,,"I1","E","N","NOC",,"0","N","N","N","N","N",,,,,
,,,,,,,,,,,,,"N","D",,,,,,,,,,,,,,,,,,,,,"INNNNN","ANNNNN",,,,,"LNNNNN",
"INNNNN",,,,,,,,,,,,,,,,,,,,,,"I","I","I","I",,,,,,,,,,,,,,,,,,,,,,,"A",,,"N",
,,,,,,,,,,,,,,,,"SPO",,"0","15",,,, ;
"KAA1_EN0AALW","INDICATION",,,"I1","E","N","NOC",,"0","N","N","N","N","N",,,,,
,,,,,,,,,,,,,"N","D",,,,,,,,,,,,,,,,,,,,,"INNNNN","WNNNNN",,,,,"LNNNNN",
"INNNNN",,,,,,,,,,,,,,,,,,,,,,"I","I","I","I",,,,,,,,,,,,,,,,,,,,,,,"A",,,"N",
,,,,,,,,,,,,,,,,"SPO",,"1","15",,,, ;


Frage 2
Am Anfang und Ende des CSV Files steht ein Begleittext, denn ich für den
Import entfernen muss. Schön wàre es, wenn ich dies automatisieren kann.

Begleittext
DATA
Datensàtze wie Muster oben
END;
Begleittext


Mein Lösungsversuch (Begleittext von Hand entfernt)
Ich lese das CSV und schreibe ein neues File:

Function Test()

Dim F As Integer
Dim TextZeile As String
Dim TextNew As String

F = FreeFile
n = 0
Open "d:\xxx\en\Kopie von KLS_LU_CAT.TXT" For Input As F
Do While Not EOF(F)

Line Input #F, TextZeile
'Zeichen suchen
If InStr(1, TextZeile, ";") > 0 Then
TextNew = TextNew & TextZeile
Else
TextNew = TextNew & TextZeile
End If
Loop
Close F
'Vor dem Replace letztes ; entfernen
txt_WriteAll "d:\xxx\en\von KLS_LU_CAT.TXT", _
Replace(Left(TextNew, Len(TextNew) - 1), ";", vbNewLine)
End Function

Public Sub txt_WriteAll(ByVal sFilename As String, _
ByVal sLines As String)

Dim F As Integer

' Datei zum Schreiben öffnen
' Achtung: bisheriger Inhalt wird gelöscht!
F = FreeFile
Open sFilename For Output As #F
Print #F, sLines
Close #F
End Sub

Kann man hier noch irgendwas verbessern.

Sonst bleibt nur noch die Frage 2

Gruss
Christian
PS: Infolge Nachtschicht am Tag nicht anwesend

Ähnliche fragen