txt datei einlesen - mit split zuteilen
txt datei einlesen - mit split zuteilen
hallo,
danke nochmal an alle, die mir gestern bei meinem kleinen problem helfen konnten. hab es dann mit sehr viel geduld irgendwann hingebracht.
so hab jetzt leider aber ein anderes problem.
hab ne textdatei mit ungefähr folgender struktur:
+ 9999$00023$KG$ 746895609$ 48027418$ 55101018$ 48079456$ 55153631
+ 9998$ 48030377$ 55104147
+ 9998$ 48030646$ 55150845
+ 9998$ 48077343$ 55150575
+ 9998$ 48077073$ 55103877
+ 9990$30940543$ 2$ 48029700$ 55153631$ 0$5$ 746895609
+ 9990$30940544$ 1$ 48036775$ 55151143$ 0$5$ 746895609
+ 9990$30940544$ 4$ 48063981$ 55152150$ 0$5$ 746895609
+ 9990$30940544$ 6$ 48064906$ 55152388$19$5$ 746895609
+ 9990$30940544$ 7$ 48065031$ 55151875$19$5$ 746895609
+ 9990$30940544$ 8$ 48070362$ 55150693$ 0$5$ 746895609
+ 9990$30940544$ 10$ 48071488$ 55150731$19$5$ 746895609
...
und so geht des immer weiter.
will jetzt folgendes erreichen. also den anfang (die ersten 6 zeilen) sind unwichtig. aber danach würd ich gern die zeilen (vielleicht mit split) so zerlegen, dass ich bestimmte abschnitte separat speichern kann:
z. B. 2$ 48029700$ 55153631$
(die 2 ist die punktnummer, 48029700 rechtswert, 55153631 hochwert
u.s.w., dass ich halt dann drei verschiedene arrays habe, wo die ganzen daten drin sind.
nur ich hab keine ahnung wie ich des machen soll.
wäre super, wenn mir da einer einen schubs in die richtige richtung gibt bzw. mir helfen kann.
danke für die mühe.
mfg stash
danke nochmal an alle, die mir gestern bei meinem kleinen problem helfen konnten. hab es dann mit sehr viel geduld irgendwann hingebracht.
so hab jetzt leider aber ein anderes problem.
hab ne textdatei mit ungefähr folgender struktur:
+ 9999$00023$KG$ 746895609$ 48027418$ 55101018$ 48079456$ 55153631
+ 9998$ 48030377$ 55104147
+ 9998$ 48030646$ 55150845
+ 9998$ 48077343$ 55150575
+ 9998$ 48077073$ 55103877
+ 9990$30940543$ 2$ 48029700$ 55153631$ 0$5$ 746895609
+ 9990$30940544$ 1$ 48036775$ 55151143$ 0$5$ 746895609
+ 9990$30940544$ 4$ 48063981$ 55152150$ 0$5$ 746895609
+ 9990$30940544$ 6$ 48064906$ 55152388$19$5$ 746895609
+ 9990$30940544$ 7$ 48065031$ 55151875$19$5$ 746895609
+ 9990$30940544$ 8$ 48070362$ 55150693$ 0$5$ 746895609
+ 9990$30940544$ 10$ 48071488$ 55150731$19$5$ 746895609
...
und so geht des immer weiter.
will jetzt folgendes erreichen. also den anfang (die ersten 6 zeilen) sind unwichtig. aber danach würd ich gern die zeilen (vielleicht mit split) so zerlegen, dass ich bestimmte abschnitte separat speichern kann:
z. B. 2$ 48029700$ 55153631$
(die 2 ist die punktnummer, 48029700 rechtswert, 55153631 hochwert
u.s.w., dass ich halt dann drei verschiedene arrays habe, wo die ganzen daten drin sind.
nur ich hab keine ahnung wie ich des machen soll.
wäre super, wenn mir da einer einen schubs in die richtige richtung gibt bzw. mir helfen kann.
danke für die mühe.
mfg stash
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Aber wo liegt das Problem?
QIODevice::readLine() benutzen und zerlegen.
QIODevice::readLine() benutzen und zerlegen.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
3 Arrays wird recht unübersichtlich. Definier dir halt ein struct, etwa so:
Dann liest du, wie von Christian bereits erwähnt, jede Zeile einzeln ein. Diese Zeilen kannst du Splitten (als Split-Zeichen verwendest du $).
Jetzt nur noch für jeden Punkt ein Point-Objekt angelegt und in dein Array (oder QList/QVector/...). So gewährleistest du, dass selbst nach ausgiebigen Sortier-Orgien die Integrität der Daten bestehen bleibt (kannst ja mal überlegen, wie komplex es wird, wenn du immer in 3 Arrays rumwühlen musst, um nach x/y/n zu sortieren...)
Grüße
Franz
Code: Alles auswählen
struct Point {
int n; // Nummer
int x; // Rechtswert
int y; // Hochwert
};Jetzt nur noch für jeden Punkt ein Point-Objekt angelegt und in dein Array (oder QList/QVector/...). So gewährleistest du, dass selbst nach ausgiebigen Sortier-Orgien die Integrität der Daten bestehen bleibt (kannst ja mal überlegen, wie komplex es wird, wenn du immer in 3 Arrays rumwühlen musst, um nach x/y/n zu sortieren...)
Grüße
Franz
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
ups richtig 
sorry, hätt ich auch selber draufkommen können.
trotzdem merci. aber ich hab noch ein problem
.
ich lese jede einzelne zeile mit readline() ein. und dann will ich einen split ansetzen. nur das problem ist, dass ich einen textstream dann habe und split geht nur bei strings. kann ich irgendwie einen textstream in einen string konvertieren, um diesen dann anschließend zu splitten.
vielen dank
mfg stash
sorry, hätt ich auch selber draufkommen können.
trotzdem merci. aber ich hab noch ein problem
ich lese jede einzelne zeile mit readline() ein. und dann will ich einen split ansetzen. nur das problem ist, dass ich einen textstream dann habe und split geht nur bei strings. kann ich irgendwie einen textstream in einen string konvertieren, um diesen dann anschließend zu splitten.
vielen dank
mfg stash
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Auch diese Frage wurde Dir schonmal beantwortet soweit ich mich errinnern kann.
Des Weiteren sehe ich nirgends eine Funktion readLine() die mir einen QTextStream zurückliefert.
Ausserdem gibt es immer noch (nein, sie ist nicht weggelaufen) die DOKU!
Des Weiteren sehe ich nirgends eine Funktion readLine() die mir einen QTextStream zurückliefert.
Ausserdem gibt es immer noch (nein, sie ist nicht weggelaufen) die DOKU!
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
ja das mag vielleicht sein, aber gestern hab ich es anders gelöst dann:
hier auszug aus meinem code:
QString fileName = QFileDialog::getOpenFileName(0, "Open File","", "Koordinaten (*.dfk)");
QFile f(fileName);
pfad->setText(fileName);
bool ok;
if (f.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream t(&f);
while(!t.atEnd())
{
t.readLine();
...
und dann wird eingelesen.
nur ich hab halt jetzt einen TextStream. und nicht sauer sein bitte, wenn ich mit der doku nicht so zurecht komm. bin noch ziemlich neu was die sprache angeht.
mfg stash
hier auszug aus meinem code:
QString fileName = QFileDialog::getOpenFileName(0, "Open File","", "Koordinaten (*.dfk)");
QFile f(fileName);
pfad->setText(fileName);
bool ok;
if (f.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream t(&f);
while(!t.atEnd())
{
t.readLine();
...
und dann wird eingelesen.
nur ich hab halt jetzt einen TextStream. und nicht sauer sein bitte, wenn ich mit der doku nicht so zurecht komm. bin noch ziemlich neu was die sprache angeht.
mfg stash
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Das ist kein sinnloser Beitrag - wenn Du das befolgst was dort steht wärst Du wohl schon auf die Lösung gekommen! Ich habe schon mind. zweimal darauf hingewiesen dass es in der Doku korrekt steht. Es hat absolut keinen Sinn jemanden das vorzukauen was er zu programmieren hat.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Auch wenn sich Christian vielleicht manchmal im Ton verkreift, hat er doch recht.
Du schreibst selber, dass Du mit readLine den Textstream ausliest:
Und was gibt t.readLine() zurück? Da guckst du jetzt am besten mal in der Doku nach und überlegst mal wo Du dann wohl split aufrufen könntest.
Solltest Du's tatsächlich nicht raus finden, dann entferne bitte das Brett vor Deinem Kopf.
Du schreibst selber, dass Du mit readLine den Textstream ausliest:
Code: Alles auswählen
QString fileName = QFileDialog::getOpenFileName(0, "Open File","", "Koordinaten (*.dfk)");
QFile f(fileName);
pfad->setText(fileName);
bool ok;
if (f.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream t(&f);
while(!t.atEnd())
{
t.readLine();
...
Solltest Du's tatsächlich nicht raus finden, dann entferne bitte das Brett vor Deinem Kopf.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
ja danke, habs jetzt selber rausgekriegt.
mein fehler war dass ich den inhalt von readline erst in einem stream zwischengespeichert hab und dann ging natürlich nichts mehr. jetzt hab ich alles zusammengepackt und es geht.
nur hab jetzt mal ne ganz allgemeine frage in sachen gestaltung. ich hab vor meine ergebnisse in nem textbrowser darzustellen. nur ich will jetzt natürlich ne schöne ordnung aufbringen. textedit ist mein textbrowser
textedit->append(flur[z] + " " + QString::number(nr[z]) ...
anstatt der leerzeichen würd ich gern so einen abstand herbekommen als würd ich zweimal den tabulator drücken. gibts da n befehl in qt.
mein fehler war dass ich den inhalt von readline erst in einem stream zwischengespeichert hab und dann ging natürlich nichts mehr. jetzt hab ich alles zusammengepackt und es geht.
nur hab jetzt mal ne ganz allgemeine frage in sachen gestaltung. ich hab vor meine ergebnisse in nem textbrowser darzustellen. nur ich will jetzt natürlich ne schöne ordnung aufbringen. textedit ist mein textbrowser
textedit->append(flur[z] + " " + QString::number(nr[z]) ...
anstatt der leerzeichen würd ich gern so einen abstand herbekommen als würd ich zweimal den tabulator drücken. gibts da n befehl in qt.