TXT Datei mit 7 Ziffern als Beschriftung importieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

PeterM1975
*
Beiträge: 16
Registriert: So, 08.03.2020 15:41

TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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
 
Zuletzt geändert von PeterM1975 am So, 17.05.2020 17:33, insgesamt 1-mal geändert.
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren

Beitrag von mikeleb »

Hallo,
"C:\TEST_BV\TEST.txt"
ist keine korrekte URL (die benötigt wird).
Mach daraus:

Code: Alles auswählen

ConvertToURL("C:\TEST_BV\TEST.txt")
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.
Gruß,
mikeleb
PeterM1975
*
Beiträge: 16
Registriert: So, 08.03.2020 15:41

Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren

Beitrag 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
 
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren

Beitrag 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#
Gruß,
mikeleb
PeterM1975
*
Beiträge: 16
Registriert: So, 08.03.2020 15:41

Re: TXT Datei mit 7 Ziffern als Beschriftung iportieren

Beitrag 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
 
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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!).
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1315
Registriert: Fr, 09.12.2011 16:50

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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.
Dateianhänge
anleitung textimport.odt
(56.49 KiB) 103-mal heruntergeladen
Gruß,
mikeleb
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag von Toxitom »

Hallo Peter,

nur um Deine direkt sichtbaren Codefehler auszubessern:

Code: Alles auswählen

Open "C:\TEST_BV\TEST.txt" For Input As 1#
muss natürlich heissen:

Code: Alles auswählen

Open "C:\TEST_BV\TEST.txt" For Input As #1
- 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
PeterM1975
*
Beiträge: 16
Registriert: So, 08.03.2020 15:41

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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
Dateianhänge
OO_Forum.pdf
(154.56 KiB) 114-mal heruntergeladen
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
PeterM1975
*
Beiträge: 16
Registriert: So, 08.03.2020 15:41

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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
PeterM1975
*
Beiträge: 16
Registriert: So, 08.03.2020 15:41

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag 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
Ergebnis.png (3.47 KiB) 3845 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
PeterM1975
*
Beiträge: 16
Registriert: So, 08.03.2020 15:41

Re: TXT Datei mit 7 Ziffern als Beschriftung importieren

Beitrag von PeterM1975 »

Danke, es läuft!

FREU, FREU, FREU!

VG Peter
Antworten