Beliebige Zeile aus Datei aulesen

Alles rund um die Programmierung mit Qt
Antworten
greenghecco
Beiträge: 24
Registriert: 7. Juli 2010 14:31

Beliebige Zeile aus Datei aulesen

Beitrag von greenghecco »

Hallo, besteht die Möglichkeit eine beliebige Zeile aus einer Datei auszulesen. Alternativ kann ich natürlich readline mit nem integer wert bis dato machen und alles wegwerfen. Aber das erscheint mir irgendwie unelegant. Ich habe eine QFile und will direkt auf eine Zeile zb. die 20te zugreifen und diese in ein QStringArray packen.

Danke und Gruß
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nein sowas geht nicht (wie auch) - nur wenn die Zeilen alle gleich lang sind.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Christian81 hat geschrieben:Nein sowas geht nicht (wie auch) - nur wenn die Zeilen alle gleich lang sind.
Mit QFile nicht, aber vllt. mit std::ifstream + std::istream_iterator + std::advance (ungestestet).

// edit:
Nö, geht nicht. Liegt daran, dass der der iterator über den operator>> geht, und der separiert nach whitespaces, und nicht nach newlines. Außerdem muss auch immer gelesen werden.
Also selber mit file.readLine() oder auch QTextStream solange vorwärts watscheln, bis du an Zeile <xyz> bist.
thrall
Beiträge: 4
Registriert: 2. August 2010 15:46

Re: Beliebige Zeile aus Datei aulesen

Beitrag von thrall »

greenghecco hat geschrieben:Hallo, besteht die Möglichkeit eine beliebige Zeile aus einer Datei auszulesen. Alternativ kann ich natürlich readline mit nem integer wert bis dato machen und alles wegwerfen. Aber das erscheint mir irgendwie unelegant. Ich habe eine QFile und will direkt auf eine Zeile zb. die 20te zugreifen und diese in ein QStringArray packen.

Danke und Gruß
Da muss schon etwas (also Deine Funcktion) die Datei so lange lesen, bis die 20te Zeilen gefunden wurde.

Warum aber ausgerechnet die 20te? Ist das Format der Datei immer fix? Was wenn es sich mal ändert?

Evtl. ist die Datei zu Parsen oder nach einem regulären Ausdruck zu suchen besser...
greenghecco
Beiträge: 24
Registriert: 7. Juli 2010 14:31

Beitrag von greenghecco »

20 war nur n Beispiel, ja ich skippe nun die Zeilen einfach immer durch. Funzt auch prima, dachte nur es gibt was eleganteres. Aber ich befürchte geht wohl nicht, sonst müsst man den Inhalt einer File ja komplett in den Stream schicken und das würde wohl der buffer nicht mitmachen. Aber tzrotzdem danke. :)
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Das Problem besteht darin, dass du nicht weisst, ab welchen Byte die 20. Zeile anfängt. Also musst du sie suchen gehen. Und solange die 20. Zeile nicht immer an der selben Stelle anfängt gibt es auch keine andere Möglichkeit.
guenter.w
Beiträge: 8
Registriert: 29. Juni 2009 18:42

Beitrag von guenter.w »

Ehm,
Ich glaube, das Sinnvollste ist wirklich alles mit ner while-Schleife einlesen und dann in ne QStringList packen, dann kannst dir ja das 20. Element rausfischen.

Alternativ kannst du auch Zeilenumbrüche nachzählen.

Hier mal ein nicht getestes Beispiel;

QString data = file.readAll();
int i = 0;
int begin = 0;
int last = 0;

while ( i != 19 && data.indexOf("\n") != -1 ) {
beginn = data.indoexOf("\n",last+1);
last = beginn;
i++;
}

Wenn ich mich nicht vertan hab, übergeht er nun 19 Zeilenümbruche und bleibt an der 20. Stelle stehen.
Von dort aus musst du nurnoch bis zum nächsten Zeilenumbruch lesen.
Z.B.:

QString line20 = data.mid(begin+1,data.indexOf("\n",begin+1) - (begin+1));

Oh kann sein das "\n" als zwei zeichen gesehen wird, dann ist es natürlich jeweil +2 ;-)

Eleganter is aber immenoch .readLine() *find*
Antworten