Lange Hostdatei parsen, wie geht das?
Moderator: Moderatoren
Lange Hostdatei parsen, wie geht das?
Hallo zusammen,
ich bin Neuling was OpenOffice Base angeht. Ich möchte eine Hostdatei parsen, und in einer Base Tabelle ablegen. Die Datei besteht aus einer langen Zeichenkette (ca. 400.000 Zeichen), die aus Datensätzen zu je 30 Zeichen besteht. Es gibt keinen Datensatztrenner, sondern die Datensätze sind über ihre Länge definiert.
Aufgrund der Länge kann ich sie nicht in einen String laden und dann via Stringfunktionen, die Datensätze exstrahieren.
Als zweiten Schritt müßten die Daten, die in Base manipuliert werden, wieder in eine Datei mit dem selben Format geschrieben werden.
Kann mir jemand erklären, wie das funktionieren könnte.
Danke schon mal in Vorraus.
ich bin Neuling was OpenOffice Base angeht. Ich möchte eine Hostdatei parsen, und in einer Base Tabelle ablegen. Die Datei besteht aus einer langen Zeichenkette (ca. 400.000 Zeichen), die aus Datensätzen zu je 30 Zeichen besteht. Es gibt keinen Datensatztrenner, sondern die Datensätze sind über ihre Länge definiert.
Aufgrund der Länge kann ich sie nicht in einen String laden und dann via Stringfunktionen, die Datensätze exstrahieren.
Als zweiten Schritt müßten die Daten, die in Base manipuliert werden, wieder in eine Datei mit dem selben Format geschrieben werden.
Kann mir jemand erklären, wie das funktionieren könnte.
Danke schon mal in Vorraus.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Lange Hostdatei parsen, wie geht das?
Ich würde die Hostdatei erstmal mit einem CSV-Programm bearbeiten und in 30-Zeichen lange Einzelsätze (carriage return und/oder nur linefeed am Ende) zerlegen. Unter Windows bietet sich hier das Freeware-Tool CSVed an.
Diese Datei kannst Du als Datenquelle (Typ: txt) mit einer BASE-Datei nutzen.
Zum Export kommen wir dann, wenn Dein Einlesen und die Bearbeitung geklappt hat.
Diese Datei kannst Du als Datenquelle (Typ: txt) mit einer BASE-Datei nutzen.
Zum Export kommen wir dann, wenn Dein Einlesen und die Bearbeitung geklappt hat.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Lange Hostdatei parsen, wie geht das?
Danke schon mal für Ansatz.
Allerdings bekomme ich mit dem Tool CSVed keine Teilung in Sätze á 30 Zeichen hin. Ich habe keine Möglichkeit gefunden, wie das damit gehen könnte (auch eine kleine Datenmenge genommen). Bisher habe ich noch kein anderes Tool gefunden.
Schönen Gruß
Allerdings bekomme ich mit dem Tool CSVed keine Teilung in Sätze á 30 Zeichen hin. Ich habe keine Möglichkeit gefunden, wie das damit gehen könnte (auch eine kleine Datenmenge genommen). Bisher habe ich noch kein anderes Tool gefunden.
Schönen Gruß
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Lange Hostdatei parsen, wie geht das?
Tja - ich kenne die Funktionalität von CSVed an dieser Stelle ( Tab "Modify 2" , 3. Spalte: "Split Column @ Position" ), habe es bei Versuchen vorhin aber auch nicht hinbekommen.
Was mir die OOo Basic Hilfe noch sagte: bei der OPEN-Anweisung könne ich auch einen Parameter LEN für die Datensatzlänge mit angeben. Bin da aber auch nicht weiter gekommen - es kam heute morgen noch ein Stapel Arbeit dazwischen....
Viel Erfolg!
Was mir die OOo Basic Hilfe noch sagte: bei der OPEN-Anweisung könne ich auch einen Parameter LEN für die Datensatzlänge mit angeben. Bin da aber auch nicht weiter gekommen - es kam heute morgen noch ein Stapel Arbeit dazwischen....
Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Daten sind in ooBase drin
Der Ansatz für sich hat mich aber schon weiter gebracht
Ich habe mit Hilfe eines kleinen Programmes die Zeilentrennung hinbekommen und jetzt sind die Daten in ooBase drin.
Jetzt kommt der Rückweg.
Und nochmals danke
Ich habe mit Hilfe eines kleinen Programmes die Zeilentrennung hinbekommen und jetzt sind die Daten in ooBase drin.
Jetzt kommt der Rückweg.
Und nochmals danke
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Lange Hostdatei parsen, wie geht das?
zum Exportieren:
entweder die geänderten Daten in der Base-Tabelle anzeigen lassen, nach Calc übernehmen und hier exportieren -
oder -
mit einem SQL-Befehl (Befehlsfenster in Base) auslesen lassen:
entweder die geänderten Daten in der Base-Tabelle anzeigen lassen, nach Calc übernehmen und hier exportieren -
oder -
mit einem SQL-Befehl (Befehlsfenster in Base) auslesen lassen:
Code: Alles auswählen
SELECT * INTO TEXT "ausgabe.csv" FROM "tabellenname"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Lange Hostdatei parsen, wie geht das?
Also erstmal nochmal ein Dankeschön.
Also im Prinzip funktioniert das alles so (der SQL zum Speichern in einer Data läuft nicht).
Es allerdings nicht das was ich suche. Ich denke ich habe mich wohl auch nicht genau genug ausgedrückt.
So wie beschrieben brauche ich keinerlei Base, noch Programmierung, das könnte komplett in Calc passieren.
Mein Ziel war es aber die Datei über Base (BASIC) auszulesen und in einer Tabelle abzulegen und nach Datenmanipulation wieder in einer Datei abzulegen, die das gleiche Format hat wie die Ausgangsdatei, nämlich gar keines.
Es muss doch eine Möglichkeit geben, zeichenweise aus einer Datei zu lesen.
Es ist 10 Jahre her, dass ich soetwas mit VBA gemacht habe, daher möchte ich das hier als Übung ansehen. Es ist wirklich schwierig im Internet dazu etwas zufinden.
Ich möchte hier auch gar keine Komplettlösung haben, ein Ansatz oder ein Verweis auf ein Dokument würde mir auch sehr helfen.
Im Moment scheitere ich schon an so einfachen Dingen, wie über BASIC in Base Variablen mit den Daten einer Abfrage zu füllen.
Also im Prinzip funktioniert das alles so (der SQL zum Speichern in einer Data läuft nicht).
Es allerdings nicht das was ich suche. Ich denke ich habe mich wohl auch nicht genau genug ausgedrückt.
So wie beschrieben brauche ich keinerlei Base, noch Programmierung, das könnte komplett in Calc passieren.
Mein Ziel war es aber die Datei über Base (BASIC) auszulesen und in einer Tabelle abzulegen und nach Datenmanipulation wieder in einer Datei abzulegen, die das gleiche Format hat wie die Ausgangsdatei, nämlich gar keines.
Es muss doch eine Möglichkeit geben, zeichenweise aus einer Datei zu lesen.
Es ist 10 Jahre her, dass ich soetwas mit VBA gemacht habe, daher möchte ich das hier als Übung ansehen. Es ist wirklich schwierig im Internet dazu etwas zufinden.
Ich möchte hier auch gar keine Komplettlösung haben, ein Ansatz oder ein Verweis auf ein Dokument würde mir auch sehr helfen.
Im Moment scheitere ich schon an so einfachen Dingen, wie über BASIC in Base Variablen mit den Daten einer Abfrage zu füllen.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Lange Hostdatei parsen, wie geht das?
Dann verstehe ich Deine Frage nicht...?
Was suchst Du? Die BASIC-Anweisungen, um eine Abfrage zu formulieren und auszuführen? Die Anweisungen, um den Export in die CSV-Datei als SQL mit BASIC zu gestalten...?
Was suchst Du? Die BASIC-Anweisungen, um eine Abfrage zu formulieren und auszuführen? Die Anweisungen, um den Export in die CSV-Datei als SQL mit BASIC zu gestalten...?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Lange Hostdatei parsen, wie geht das?
Du kannst die Datei direkt in OOo öffnen, dabei erzeugt OOo zwangsweise Absätze mit maximal 64k Zeichen, diese Absätze kannst Du absatzweise auslesen.Aufgrund der Länge kann ich sie nicht in einen String laden und dann via Stringfunktionen, die Datensätze exstrahieren.
(nicht aktuell getestet, sollte aber gehen)
Gruß
Stephan
Re: Lange Hostdatei parsen, wie geht das?
Erstmal geht es um das einlesen der Datei, die aus einer Zeile mit 400.000 Zeichen besteht.
Zwei Zeichen lesen, einer Variablen zuweisen, sieben Zeichen lesen, zuweisen, ... bis 31 Zeichen, dann ist ein Record komplett, soll als solcher in die Tabelle geschrieben werden, und dann wieder zwei Zeichen lesen. Sequentielles Auslesen aus der Datei.
Die Daten in der Tabelle können, wenn alles vorbei ist ganz normal manipuliert werden. Zu einem bestimmten Zeitpunkt muss der Inhalt der Tabelle wieder in eine Datei mit dem selben Format geschrieben werden (s.o.) damit sie vom Host verarbeitet werden kann.
Was ich verhindern möchte ist, von einem Format ist nächste, dann von Calc nach Base irgenwann wieder zurück, und zum Schluss alle Sonderzeichen händisch wieder entfernen, denn es darf keine CSV Datei sein am Schluss.
Hier ist mal ein Auszug aus der Datei:
09010100002007200710000000000000000006661368000011000000000000000000666140200002500000000000000000066614460000230000000000000000006661480000015000000000000000003197104800003700000000000000000326710420000040000000000000000032671048000016000000000000000003726036800002100000000000000000372604020000290000000000000000037260446000022000000000000000003726048000001200000000000000000482610340000530000000000000000048261036000065000000000000000004826103800009700000000000000000482610400001070000000000000 ...
Zwei Zeichen lesen, einer Variablen zuweisen, sieben Zeichen lesen, zuweisen, ... bis 31 Zeichen, dann ist ein Record komplett, soll als solcher in die Tabelle geschrieben werden, und dann wieder zwei Zeichen lesen. Sequentielles Auslesen aus der Datei.
Die Daten in der Tabelle können, wenn alles vorbei ist ganz normal manipuliert werden. Zu einem bestimmten Zeitpunkt muss der Inhalt der Tabelle wieder in eine Datei mit dem selben Format geschrieben werden (s.o.) damit sie vom Host verarbeitet werden kann.
Was ich verhindern möchte ist, von einem Format ist nächste, dann von Calc nach Base irgenwann wieder zurück, und zum Schluss alle Sonderzeichen händisch wieder entfernen, denn es darf keine CSV Datei sein am Schluss.
Hier ist mal ein Auszug aus der Datei:
09010100002007200710000000000000000006661368000011000000000000000000666140200002500000000000000000066614460000230000000000000000006661480000015000000000000000003197104800003700000000000000000326710420000040000000000000000032671048000016000000000000000003726036800002100000000000000000372604020000290000000000000000037260446000022000000000000000003726048000001200000000000000000482610340000530000000000000000048261036000065000000000000000004826103800009700000000000000000482610400001070000000000000 ...
Re: Lange Hostdatei parsen, wie geht das?
Wenn ich das mache öffnet er sie mir im Writer.Stephan hat geschrieben:Du kannst die Datei direkt in OOo öffnen, dabei erzeugt OOo zwangsweise Absätze mit maximal 64k Zeichen, diese Absätze kannst Du absatzweise auslesen.Aufgrund der Länge kann ich sie nicht in einen String laden und dann via Stringfunktionen, die Datensätze exstrahieren.
(nicht aktuell getestet, sollte aber gehen)
Gruß
Stephan

Re: Lange Hostdatei parsen, wie geht das?
Ja, natürlich, das ist doch Sinn der Sache. Wenn Sie in Writer offen ist kannst Du anschließend auslesen was Du willst und das neu zusammenstellen. Ich denke genau darum gings, einen sehr langen String in Teilstrings zu zerlegen um die weiterbesarbeiten zu können.Wenn ich das mache öffnet er sie mir im Writer.
Gruß
Stephan
Re: Lange Hostdatei parsen, wie geht das?
So, das Schreiben in die Datei habe ich jetzt erledigt. Jetzt werde ich mal versuchen, die Tabelle von der Datei aus zu füllen.
Damit man verstehen kann was ich meinte (Aufgrund der Größe zu Testzwecken auf 10 Sätze beschränkt):
Sub setDataToFile
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object
Dim iNumber As Integer
Dim sZeile As String
Dim aFile As String
Dim sMsg as String
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("HostData")
If Not DataSource.IsPasswordRequired Then
Connection = DataSource.GetConnection("","")
Else
InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("SELECT * FROM ""tblHostData""")
aFile = "C:\Daten\HostData\daten.txt"
iNumber = Freefile
Open aFile For Output As #iNumber
If Not IsNull(ResultSet) Then
For I = 1 to 10
ResultSet.next
Print #iNumber, ResultSet.getString(1) + ResultSet.getString(2) + ResultSet.getString(3) + ResultSet.getString(4) + ResultSet.getString(5) + ResultSet.getString(6);
Next I
Print #iNumber, ""
Close #iNumber
End If
End Sub
Damit man verstehen kann was ich meinte (Aufgrund der Größe zu Testzwecken auf 10 Sätze beschränkt):
Sub setDataToFile
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object
Dim iNumber As Integer
Dim sZeile As String
Dim aFile As String
Dim sMsg as String
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("HostData")
If Not DataSource.IsPasswordRequired Then
Connection = DataSource.GetConnection("","")
Else
InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("SELECT * FROM ""tblHostData""")
aFile = "C:\Daten\HostData\daten.txt"
iNumber = Freefile
Open aFile For Output As #iNumber
If Not IsNull(ResultSet) Then
For I = 1 to 10
ResultSet.next
Print #iNumber, ResultSet.getString(1) + ResultSet.getString(2) + ResultSet.getString(3) + ResultSet.getString(4) + ResultSet.getString(5) + ResultSet.getString(6);
Next I
Print #iNumber, ""
Close #iNumber
End If
End Sub