2016-05-24 10 views
0

im QTextStreamer mit einem QFile lesen mitsucht Linie in QTextStream

if(file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    { 
     QTextStream stream(&file); 
     line = stream.readLine(); 

aber meiner Anforderung muß ich nur bestimmten Satz von Linien nur aus meiner Datei zu lesen. zB: wenn die Datei 1034 Zeilen enthält. Der Benutzer kann nur zwischen Zeile 107 und Zeile 300 wählen, um in einer TextBox gelesen und angezeigt zu werden.

Wie kann ich die Position des qtextStream Readers so einstellen, dass er auf die jeweilige Zeile der Datei zeigt.

jetzt die Umsetzung im, wie

int count = 4; 
     while(count > 0) 
     { 
      line = stream.readLine(); 
      count --; 
     } 
     line = stream.readLine(); 

Antwort

1

QTextStream ein Strom ist, nicht-Array. Das, weil Sie keine Zeile bekommen können, ohne es zu lesen.

Einiger Weg ist (nur ein einfaches Beispiel):

QFile file("file_name"); 
QTextStream stream(&file); 
QStringList list; 
int line = 0; 
if(file.open(QIODevice::ReadOnly)) 
    while(!stream.atEnd()) { 
     if(line == 4 || line == 5 || line == 6) 
      list << stream.readLine(); 
     else 
      stream.readLine(); 
     line++; 
    } 

Je härter Weg:

if(file.open(QIODevice::ReadOnly)) { 
    QByteArray ar = file.readAll(); 
    QByteArray str; 
    for(int i = 0; i < ar.size(); i++) { 
     if(line == 4 || line == 5 || line == 6) { 
      if(ar.at(i) == '\n') { 
       list << QString::fromUtf8(str.replace("\r", "")); 
       str.clear(); 
      } 
      else 
       str += ar.at(i); 
     } 
     if(ar.at(i) == '\n') 
      line++; 
    } 
} 
+0

dank .im in gleicher Weise folgen. aber ist es nicht möglich, von einer bestimmten Zeile von QFile zu lesen. nicht nur mit textStream, sondern auch auf andere Weise verfügbar? Beispiel: In qtextDocument können wir mit startWithLine eine bestimmte Zeile lesen ( – Wagmare

+1

@Wagmare) Um die Zeilennummer zu finden, müssen Sie die Anzahl der Zeilenumbrüche zählen. Um dies zu tun, müssen Sie die Datei nicht lesen (außer Sie haben eine konstante Zeile) length). QTextDocument macht das vielleicht unter der Haube, aber es macht keinen großen Unterschied, ob Qt es tut oder nicht, es sind nur ein paar Zeilen Code. –