Seite 1 von 1
TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 12:52
von PeterM1975
Hallo zusammen,
ich würde gerne eine TEXT datei mit 36.000 Einträgen analysieren. Lieder kann ich die txt-Datei nicht einfach in calc öffen und bearbeiten. Denn ich bekomme die Daten einfach nicht auf calc, oder die "0" der Feldbeschriftung macht mir Probleme. Also habe ich mir gedacht, ich nutze das Forum, passe den Code an und ich kann die Daten Importieren.
I.
Leider scheitere ich gerade mit dem Code schon in der ersten Zeile (BASIC Laufzeitfehler) Gerät E/A fehlt.
Wenn ich den Pfad im Explorer eingebe, springt die TXT Datei aber gleich auf.
Habe ich was falsch gemacht?
II. Meine Datenquelle hat kein "," zwischen den Datenblöcken (so sehen die Daten in der Textdatei aus: 083771Milch oder 08377120200323. Wie kann ich denn nach 7 Ziffern also ab der 8. Ziffer die folgenden Zahlen und Buchstaben in die 2. Spalte importieren?
VG Peter
Code: Alles auswählen
REM ***** BASIC *****
Sub Einlesen()
Dim objDatei as Object
Dim objBlaetter As Object
Dim objBlatt As Object
Dim objZelle As Object
Z = 1
Open "C:\TEST_BV\TEST.txt" For Input As 1#
Do While Not EOF(1)
Line Input #1, Datei
einzel = Split(Datei, ";")
objDatei = ThisComponent
objBlatt = objDatei.Sheets(1)
For i = 0 To Ubound(einzel())
objZelle = objBlatt.getCellByPosition(i, Z)
objZelle.string = einzel(i)
Next i
Z = Z + 1
Loop
Close #1
End Sub
Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren
Verfasst: So, 17.05.2020 13:01
von mikeleb
Hallo,
"C:\TEST_BV\TEST.txt"
ist keine korrekte URL (die benötigt wird).
Mach daraus:
und es sollte klappen.
Ein Import sollte aber auch so funktionieren. Wähle beim Import die Option "Feste Breite" und verschiebe dann die Breite auf 7 Zeichen.
Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren
Verfasst: So, 17.05.2020 13:17
von PeterM1975
Vielen Dank mikeleb! Ich habe leider keine Ahnung von den Codes. Nun habe ich einen Syntax Fehler. Habe ich was falsch verstanden?
VG Peter
Code: Alles auswählen
REM ***** BASIC *****
Sub Einlesen()
Dim objDatei as Object
Dim objBlaetter As Object
Dim objBlatt As Object
Dim objZelle As Object
Z = 1
ConvertToURL("C:\TEST_BV\TEST.txt") For Input As 1#
Do While Not EOF(1)
Line Input #1, Datei
einzel = Split(Datei, ";")
objDatei = ThisComponent
objBlatt = objDatei.Sheets(1)
For i = 0 To Ubound(einzel())
objZelle = objBlatt.getCellByPosition(i, Z)
objZelle.string = einzel(i)
Next i
Z = Z + 1
Loop
Close #1
End Sub
Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren
Verfasst: So, 17.05.2020 16:10
von mikeleb
Hallo,
Ich habe leider keine Ahnung von den Codes.
Das mach' es über den Import. Was ist das für eine Textdatei (.txt, .csv)? Bekommst du eine Fehlermeldung, wenn du versuchst sie in Calc zu öffnen?
Im Code muss der Befehl Open natürlich stehen bleiben.
Code: Alles auswählen
Open ConvertToURL("C:\TEST_BV\TEST.txt") For Input As 1#
oder
Code: Alles auswählen
sDateiname=ConvertToURL("C:\TEST_BV\TEST.txt")
Open sDateiname For Input As 1#
Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren
Verfasst: So, 17.05.2020 17:31
von PeterM1975
Hallo miceleb,
leider bekomme ich sofort in der Zeile "Open" einen "Basic-Laufzeitfehler Geräte E/A-Fehler" (Code unten)
Wenn ich die TXT - Datei mit Calc öffne, verschwinden die Nullen am Anfang und ich bekomme diese Darstellung: 5,4548E+013.
Oder gibt es noch eine Möglichkeit die Daten aus der Text-Datei mit der korrekten Darstellung in Calc zu importieren?
VG Peter
Code: Alles auswählen
REM ***** BASIC *****
Sub Einlesen()
Dim objDatei as Object
Dim objBlaetter As Object
Dim objBlatt As Object
Dim objZelle As Object
Z = 1
sDateiname=ConvertToURL("C:\TEST_BV\TEST.txt")
Open sDateiname For Input As 1#
Do While Not EOF(1)
Line Input #1, Datei
einzel = Split(Datei, ";")
objDatei = ThisComponent
objBlatt = objDatei.Sheets(1)
For i = 0 To Ubound(einzel())
objZelle = objBlatt.getCellByPosition(i, Z)
objZelle.string = einzel(i)
Next i
Z = Z + 1
Loop
Close #1
End Sub
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 18:30
von mikeleb
Hallo,
der E/A-Fehler bedeutet letztlich, dass er die Datei nicht gefunden hat. Unbedingt die Schreibweise kontrollieren (Groß- und Kleinschreibung wird unterschieden!).
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 19:03
von mikeleb
Hallo,
es geht auch über den Textimport. Also wie bereits beschrieben: feste Breite wählen und dann noch die Spalten als Text deklarieren. Das ganze habe ich im Anhang versucht zu verbildlichen.
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 19:27
von Toxitom
Hallo Peter,
nur um Deine direkt sichtbaren Codefehler auszubessern:
muss natürlich heissen:
- der Dateipfad muss allerdings auch als URL übergeben werden, siehe auch Antwort von Mikeleb.
entscheidend ist hier aber die Zählerzahl. Die lautet immer #n und nicht n#!!
Zudem kann die "1" zu eiem Fehler führen. Woher willst Du wissen, dass die "1" nicht schon belegt ist - intern oder durch einen anderen Prozess?? Lass Dir die Zahl *immer* vom System geben und zwar direkt vor dem Öffnungs-Befehl. Dafür gibt es die Funktion "freefile()"
Also, der Start Deines Codes:
Code: Alles auswählen
ub Einlesen()
Dim objDatei as Object
Dim objBlaetter As Object
Dim objBlatt As Object
Dim objZelle As Object
dim sDateiName as string
Dim fn as integer
dim z%
sDateiName = ConvertToURL("C:\TEST_BV\TEST.txt")
fn = freefile()
z = 1
Open sDateiname for Input as #fn
....
Rest hab ich nicht detaillierter angesehen, könnte aber passen.
Viele Grüße
Tom
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 19:44
von PeterM1975
Vielen Dank für euren Support!
Vielleicht bin ich einfach zu doof den Code zu kopieren.
grr.... anbei nochmal einen Screenprint
VG und Danke im Voraus
Peter
Code: Alles auswählen
REM ***** BASIC *****
Sub Einlesen()
Dim objDatei as Object
Dim objBlaetter As Object
Dim objBlatt As Object
Dim objZelle As Object
dim sDateiName as string
Dim fn as integer
dim z%
sDateiName = ConvertToURL("C:\TEST_BV\TEST.txt")
fn = freefile()
z = 1
Open sDateiname for Input as #fn
Do While Not EOF(1)
Line Input #1, Datei
einzel = Split(Datei, ";")
objDatei = ThisComponent
objBlatt = objDatei.Sheets(1)
For i = 0 To Ubound(einzel())
objZelle = objBlatt.getCellByPosition(i, Z)
objZelle.string = einzel(i)
Next i
Z = Z + 1
Loop
Close #1
End Sub
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 20:06
von Toxitom
Hey,
Vielleicht bin ich einfach zu doof den Code zu kopieren.
Nein. Aber Du verstehst offensichtlich nicht, was Du da machst?
So viel Grundverständnis habe ich einfach vorausgesetzt.
- wenn Du die Dateinummer von 1 auf die Variable "fn" änderst, musst Du das natürlich immer machen ... und nicht ne Zeile Später wieder die 1 verwenden. Da hilft dann auch das kopieren nix.
Aber ok... Dein Fehler tritt sichtbar an einer anderen Stelle auf. Vielleicht keine Rechte für den Pfad? Wenn ich Deine Konstellation bei mir nachbaue, gibt es keinen Fehler (Win 10).
Oft ist aber die gezeigte Fehler-Zeile nicht korrekt ... der Fehler tritt dann eine Zeile später oder so auf. Da hilft dann nur experimentieren...
Viele Grüße
Tom
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 20:27
von PeterM1975
Ja Tom,
hatte ich ja geschrieben, dass ich keine Ahnung habe.
Als Betriebssystem nutze ich Win 10 und habe auch die Dateien dort angelegt.
Ich probiere es nochmal aus, und ersetze mal die "1".
Danke Peter
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: So, 17.05.2020 21:25
von PeterM1975
Hallo Tom,
würdest Du mir deinen Code senden mit dem Du die Daten importiert hast?
Ich bekomme es leider nicht hin....
VG Peter
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: Mo, 18.05.2020 07:33
von Toxitom
Hallo Peter,
nun, ich kenne keine Deiner Voraussetzungen. Weder die einzulesende Datei, noch die Zieldatei.
Ich nehme eine leere Calcdatei und lese die Textdatei (besteht nur aus einer Zeile "bla; bla; bla") mit dem folgenden Code ein:
Code: Alles auswählen
sub testeinlesen
REM Dokument access
oDoc = thisComponent
objBlatt = oDoc.sheets(0)
sDateiName = ConvertToURL("C:\TEST_BV\TEST.txt")
fn = freefile()
z = 1
Open sDateiname for Input as #fn
Do While Not EOF(#fn)
Line Input #fn, Datei
einzel = Split(Datei, ";")
For i = 0 To Ubound(einzel())
objZelle = objBlatt.getCellByPosition(i, z)
objZelle.string = einzel(i)
Next i
Z = Z + 1
Loop
close #fn
end sub
Das Ergebnis sieht dann wie folgt aus:

- Ergebnis.png (3.47 KiB) 6214 mal betrachtet
Hab nur ein Tabellenblatt... also Index 0
Reinschreiben ab Zeile 2 (index 1) - aus deinem Code.
Aber, versuche zu verstehen, was Du machst. Hilft Dir mehr als einfaches Kopieren. Gibt gute Anleitungen und Bücher für Basic-Makros. Und ich glaube, so ein Beispiel ist auch in der LO-Hilfe zu finden.
Viele Grüße
Tom
Re: TXT Datei mit 7 Ziffern als Beschriftung importieren
Verfasst: Mo, 18.05.2020 23:32
von PeterM1975
Danke, es läuft!
FREU, FREU, FREU!
VG Peter