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]
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......
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
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
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
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]
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
Hallo,
etwa so:
.
.
.
.
Loop
Loop
Print #LU2, strZeile1
DoCmd.TransferText acImportDelim, , "tblTestimport", "c:\testout.txt", True
Close LU1: Close LU2
End Function
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]
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 (http://www.ms-office-forum.net/forum/showthread.php?t=292967#3)), 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
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
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
Vielen Dank für Deine Stellungnahme.
Gruß TVH
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