2016-04-09 8 views
-1

Ich versuche, Zeilen aus einem TXT-Dokument, das Format der txt zu lesen, ist dies:Des Versuch, Zeilen aus Datei in QT zu lesen

Name, Nachname, Alter, Adresse, rut, Telefon

Name, Nachname, Alter, Adresse, rut, Telefon

Name, Nachname, Alter, Adresse, rut, Telefon

Und wenn ich auf den Namen Button „btnVerUsuarios“ werden alle Daten sein in einem TextBrowser auf t sofort angezeigt seine Bestellung:

Name: theName

Nachname: theLastname

Alter: theAge

Adresse: theAddress

RUT: theRut

Telefon: thePhone

Und zwei weitere Male mit allen Daten

Das ist, was ich habe, aber wenn ich versuche, dieses Programm auszuführen, wird ein Fehler und ich habe das Programm schließen:

void MainWindow::on_btnVerUsuarios_clicked() 
{ 
    QFile F("datos.txt"); 
    F.open(QIODevice::ReadOnly); 
    QTextStream leer(&F);   //here we have the content of the txt 
    QStringList parsear;   //to parse the specific data from a line 
    QString nombres;     // to save the name 
    QString apellidos;    // to save the lastname 
    QString edad;      // to save the age 
    QString address;     // to save the address 
    QString rut;      // to save the RUT 
    QString fono;      // to save the phone 
    QString forma = "";    // to save all the data 
    QString linea = leer.readLine(); // a line 
    while (!linea.isNull()) { 
     parsear = linea.split(";");  // parsing 
     nombres = parsear[0];   // the names 
     apellidos = parsear[1];   // the lastnames 
     edad = parsear[2];    // the age 
     address = parsear[3];   // the address 
     rut = parsear[4];    // the RUT 
     fono = parsear[5];    // the phone 

     linea=leer.readLine(); //to select the next line (or that is what I want) 
     forma = forma + "Nombres: "+nombres+"\nApellidos: "+apellidos+"\nEdad: "+edad+"\nDirección: "+address+"\nRUT: "+rut+"\nTeléfono: "+fono+"\n\n"; 
    } // The entire data with the required format is ok, now I have to put it in the textBrowser 
    ui->textBrowser->setText(forma); //putting the entire data int the textBrowser 

} 

wenn ein anderes einfach es Möglichkeit, dies zu tun, bitte hilf mir dabei.

Entschuldigung für mein schlechtes Englisch und danke.

EDIT

ich sofort alle Daten angezeigt werden versuchte, sorry, wenn ich habe falsch erklärt. Wie auch immer, ich habe meine Frage dank Afflicted's Antwort gelöst.

+0

Möchten Sie alle auf einmal anzeigen, oder gibt der Benutzer einige Informationen ein, die Sie verwenden möchten, um nach bestimmten Dingen zu suchen, mit denen Sie eine bestimmte Zeile mit bestimmten Informationen anzeigen können? – Afflicted

+0

Und welchen Fehler haben Sie? – Apin

Antwort

1

Nun die simple Art und Weise die gesamte Datei zu lesen und alles auf einmal wäre soetwas wie

try 
{ 
    QFile ReadMyFile("File Path Here"); 
    if(!ReadMyFile.open(QIODevice::ReadOnly)) 
    QTextStream in(&ReadMyFile); 
    QString GetContents = ReadMyFile.readAll(); 
    ui->textBrowser->setText(GetContents); 
    ReadMyFile.close(); 
} 
catch(...) // Generic catch used here, substitute with your own 
{ 
    // Print exception if one occurs 
} 

Sie sollten immer eine Ausnahmebehandlung besonders angelegt haben anzuzeigen, während die Arbeit mit Dateien Sie dies nicht tun möchte, dass Ihr Programm sofort abstürzt, wenn ein Problem beim Auffinden der Datei usw. besteht.

Der obige Code liest einfach die gesamte Datei in eine Zeichenfolge und druckt alles in den textBrowser, es gibt eine Vielzahl von Möglichkeiten zu tun Dies und ich bin mir nicht sicher, was Sie Endziel ist und für alle Absichten und Zwecke ist dies viel effizienter als das, was y Sie haben oben, aber es ist nicht etwas, das Sie einfach kopieren und immer verwenden sollten. Dies ist ein sehr einfaches Beispiel, um Sie auf Ihren Weg zu bringen, es ist für massive Dateien gedacht ...

Von dem, was ich sehe, möchten Sie die gesamte Datei auf einmal anzeigen (was Sie oben gesagt haben), aber Was ich nicht verstehe ist, warum du alles aufteilen und alles in verschiedenen QString speichern willst?

UPDATE:

Wenn Sie nicht wollen, Ihre Schreibprozess ändern und jedes Feld getrennt und endend mit einem Newline schreiben (was ich würde vorschlagen, Sie tun), dann der beste Weg, mit einem QLinkedList Das ist sein würde

http://doc-snapshots.qt.io/qt5-5.6/qlinkedlist.html

.. etwas, was man so oder so verwenden sollten, wenn Sie die Datei zu ändern beabsichtigen, und es ist Iterator

http://doc-snapshots.qt.io/qt5-5.6/qlinkedlistiterator.html#QLinkedListIterator

Es ist so einfach wie das Lesen der Datei, das Auffinden Ihres Trennzeichens und das Hinzufügen des nächsten Elements in die verknüpfte Liste. Die Dokumentation, die ich verlinkt habe, zeigt Ihnen alles, was Sie damit tun können.

+0

Siehe die aktualisierte Antwort, und versuchen Sie, eine verkettete Liste zu verwenden oder sogar Ihre eigene doppelt verkettete Liste als eine Vorlage zu implementieren, die mit QT gut funktionieren würde – Afflicted

Verwandte Themen