Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Csv Datei in Access 2007 importieren

Begonnen von Torsten., September 12, 2012, 16:16:18

⏪ vorheriges - nächstes ⏩

Torsten.

Hallo,
ich habe ein Problem mit dem importieren der anhängenden CSV-Datei.
Wenn die Daten importiert sind, ist in der Spalte "Beschreibung" um die geht es,
nach dem Wort Riemen ein nicht sichtbares Zeichen, ebenfalls vor Innendurchmesser und Breite
Ich habe mal eine Ansicht der Datei mit Notepad beigelgt, da kann man sehen das es irgendwie mit
Zeilenumbrüchen zu tun haben muß.

Jetzt möchte ich für den Import die Tabelle so gestalten, dass die, ich nenne es mal Zeilenumbrüche, ein z.B. Semikolon
bekommen, sodaß ich dann in Access die Spalte Beschreibung in mehrere Spalten (bezogen auf das Semikolon)
auflösen kann.
Das ist mein Gedanke wie ich als Laie versuchen würde die Situation zu lösen.
Wenn es auch anders geht, helft mir bitte.

Kann mir da jemand helfen?

Gruß TVH

[Anhang gelöscht durch Administrator]

69bruno

Was mich stutzig macht, Gruppe, Nr, Bezeichnung und Beschreibung stehen dort so, wie eine Spaltenüberschrift sein sollte, unter der dann die einzelnen Daten eingefügt werde.

Aber bei den Durchmessern stehen die Daten daneben.

Ich würde erst die Durchmesser in die erste Zeile bringen und dann die Daten darunter einzeilig anheften. Danach importieren.

Und dann kann man auch ein eindeutiges Spaltentrennzeichen verwenden......
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Torsten.

Hallo 69bruno,
vielen Dank für Deine Info.
Zu:
Ich würde erst die Durchmesser in die erste Zeile bringen und dann die Daten darunter einzeilig anheften.
Das ist ja mein Problem, wie bekomme ich in der CSV-Datei, pro Datensatz alles in 1 Zeile, ohne Zeilenumbrüche?

Weißt Du wie das geht?

Gruß TVH

DF6GL

Hallo,

quick and dirty:

Public Function fktConCat()
Dim LU1 As Long, LU2 As Long, g As Long
Dim strZeile As String, strZeile1 As String

LU1 = FreeFile

Open "c:\test.txt" For Input As LU1
LU2 = FreeFile

Open "c:\Testout.txt" For Output As #LU2

Do Until EOF(LU1)
Line Input #LU1, strZeile
Print #LU2, strZeile
g = 0

    Do Until EOF(LU1)
    Line Input #LU1, strZeile
   
            If Left(strZeile, 1) = """" Then
                If g > 0 Then
                   Print #LU2, strZeile1
                End If
               
                g = 1
                strZeile1 = strZeile
         
            Else
                strZeile1 = strZeile1 & ";" & strZeile
                g = g + 1
            End If
   
    Loop
Loop
Print #LU2, strZeile1

Close LU1: Close LU2

End Function

Torsten.

Hallo F.
vielen Dank für Deinen Code.
Ich habe die Datei testout.txt angelegt, den Code in VB eingefügt abgespeichert und ausgeführt.
Nun ist in der testout.txt der Inhalt der test.txt vorhanden, aber genau so wie in der test.txt.
Die unsichbaren Zeichen sind weiterhin vorhanden, sodaß ein Import der testout.txt das gleiche Ergebnis ergibt
wie der Import der test.txt.

Habe ich möglicherweise einen falschen Ablauf ausgeführt?

Gruß TVH

DF6GL

Hallo,

die testout.txt braucht nicht extra angelegt zu werden...


Im Anhang meine Test-Dateien und die mit

DoCmd.TransferText acImportDelim, , "tblTestimport", "c:\testout.txt", True

erzeugte Access-Tabelle.

[Anhang gelöscht durch Administrator]

Torsten.

Hallo F. vielen Dank,
Deine 3 Anhänge sehen sehr gut aus.
Nur wo muß ich:
DoCmd.TransferText acImportDelim, , "tblTestimport", "c:\testout.txt", True
eingeben?

Gruß TVH

DF6GL

Hallo,

etwa so:
.
.
.
.
    Loop
Loop
Print #LU2, strZeile1

DoCmd.TransferText acImportDelim, , "tblTestimport", "c:\testout.txt", True

Close LU1: Close LU2
End Function

Torsten.

Hallo F.,
bei mir funktioniert es nicht.

Vorab, den Code für den Tbl-Import habe ich hinter Close LU1: Close LU2 versetzt:

Nach Ausfürhrung des gesamten Codes bekomme ich folgende Situation,
siehe die Anhänge.

Ich finde keinen Unterschied zu Deinen Code, erhalte aber nicht das Ergebins wie
in Deiner Darstellung aom.png

Was mach ich falsch oder fehlt?



[Anhang gelöscht durch Administrator]

ebs17

Abweichender Lösungsweg zu den bisherigen Gedanken: Wenn ich die Daten in der Textdatei einzeln anfasse, kann ich sie auch gleich direkt in meine Zieltabelle schreiben statt die Daten umzuordnen, in die Datei zurückzuschreiben und dann einen Standardimport anzuwenden, der in Sachen Speicherung von atomaren Informationen auch noch deutlich ungenügend ist.

Ich würde einen Ablauf wählen analog der hier geschilderten Situation (=> Like Funktion), also

1) Textdateiinhalt in eine Stringvariable laden,
2) vor die Zeichenfolge " 23 " ein markantes Trennzeichen setzen,
3) mit Split einzeln auswertbare Informationseinheiten erzeugen,
4) aus letzteren die gewünschten Einzelinformationen herauslösen und
5) letztlich diese Einzelinformationen in die (eigentliche) Zieltabelle schreiben.

Einen solchen Ablauf halte ich für direkt und einfach und somit schnell sowie für variabel und erweiterbar und somit leicht pflegbar.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Torsten.

Hallo ebs,
vielen Dank für die Anregung, ich habe sie auch verstanden ;-)
Aber ich bin nicht in der Lage es umzusetzen, da ich Code
nur kopieren und einfügen kann, so wie df6gl es mir vorgibt.

Wenn Du mir den Code schreibst, könnte ich es versuchen umzusetzen.

Gruß TVH

ebs17

Zitatnur kopieren und einfügen kann

Wenn das als Versuch der Umsetzung verstanden werden soll, würde ich Dir eher die Verwendung einer Jobbörse oder eines entsprechenden Dienstleistungsbereiches empfehlen wollen.

Ein wenig sollte man auch den Code selber verstehen, um ihn umsetzen und pflegen zu können, immerhin können sich Anforderungen schnell ändern. Zum sinngemäßen Copy&Paste findest Du im verlinkten Thema allerhand Stoff.

Ein Forum will meiner Meinung nach Hilfe zur Selbsthilfe bieten. Ein "schreib mir einen Code und ich probiere das zu kopieren" würde ich dabei nicht als Selbsthilfe  bezeichnen, sondern als "Dünnbrettbohren".

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Torsten.

Vielen Dank für Deine Stellungnahme.
Gruß TVH

69bruno

Vielleicht solltest Du es anders angehen, dabei lernst Du auch ein wenig, wie Code aussehen muss.

Öffne eine Kopie der .txt mit Word, zeichne ein Makro auf. Suche das Wort "Riemen", gehe eine Pfeiltaste nach rechts, füge ein Semikolon ein. Suche nach unten die nächste Absatzmarke, lösche das Suchergebnis.
Suche nacheinander nach "Innendurchmesser [mm]:" dann die Absatzmarke und "Aussendurchmesser [mm]:" (in der Reihenfolge, wie in der txt vorkommt), lösche jeweils nach dem Suchen die Suchergebnisse.

Speicher das Makro, sieh es Dir an. Setze eine do until eof Schleife (Hierzu hilft die VBA-Hilfe), setze den Cursor an erste Stelle der Datei und lass es rödeln.

Wenn fertig, ergänzt Du nur in der Überschriftenzeile "Innendurchmesser" und "Aussendurchmesser". Dann sollte es so aussehen, wie du es brauchst.

Ich weiss, dass jetzt einige die Hände über dem Kopf zusammenschlagen. Aber so gewinnt man die ersten Einblicke in VBA-Code, wenn man nicht zu einer Schulung gehen kann und die einschlägigen  Beschreibungen nich versteht/nicht liest.

Evtl. wirst Du mehrere Versuche brauchen, um das gewünschte Ergebnis zu erzielen, aber du wirst dann schnell feststellen, welcher Code fehlte oder anders eingegeben werden musste. Learning by doing eben.

Das ganze macht natürlich nur Sinn, wenn du die Datei nur einmal anpassen musst und nicht jede Woche z.B. ;D
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If