QFile wortweise einlesen



  • Hey Leute,
    kann mir vll jemand sagen wie man mit QFile wortweise einlesen kann.
    Ich habe nur die methode

    QFile data( "test.txt" );
    
    char buffer[1024];
    
    data.readLine( buffer, sizeof( buffer ) );
    

    Sowas bräuchte ich blos, dass man wortweise einlesen kann.
    Es würd ja schon reichen wenns net Funktion gäbe, wo man anstatt die maximale anzahl an zeichen die eingelesen werden angeben kann, sondern ein Zeichen bis zu welchem eingelesen wird.

    Schonmal vielen Dank

    gruß freeG



  • Also, mir wäre da auf anhieb mal nichts bekannt das QFile das könnte. Aber als alternative könntest du Zeilenweise einlesen und ein split auf ein Leerzeichen machen, oder Zeichenweise einlesen und auf ein Leerschritt oder jedes andere Zeichen reagieren.



  • wenns nicht unbedingt QFile sein muss, kannst du QTextStream benutzen.
    http://doc.trolltech.com/4.6/qtextstream.html#operator-gt-gt-4

    mfg,
    julian



  • Hey vielen Dank für die beiden Antworten,
    habs jetzt schon mit split gelöst. Einfach das char Array welches in readLine gefüllt wurde, in nen QString umgewandelt und diesen in ne QStringList gesplittet.

    Aber trotzdem auch danke für die andere Möglichkeit.
    Jetzt muss ich nur noch schauen wie ich das ganze nicht nur mit .txt dateien machen kann, sondern auch pdf und eventuell doc.

    gruß freeG



  • fr33g schrieb:

    Jetzt muss ich nur noch schauen wie ich das ganze nicht nur mit .txt dateien machen kann, sondern auch pdf und eventuell doc.

    zum laden von pdf-files koenntest du ja poppler benutzen.
    zu doc-files weiss ich nicht obs ne da ne lib gibt, vllt. openoffice mal angucken sonst oder sowas.

    mfg,
    julian



  • Ok danke, poppler kenn ich zwar noch nicht, aber werde ich mich mal erkundigen...
    gibts vll ne page mit doku?

    danke
    gruß freeG



  • http://doc.trolltech.com/qq/qq27-poppler.html
    das hab ich noch in meinen bookmarks gefunden, vllt. schon bisschen aelter, keine ahnung obs was hilft ... sonst halt die poppler-seite, da steht auch was zum qt4-interface.

    mfg,
    julian



  • nen QTextStream auf nen QFile loslassen ist doch genau das, was man da braucht.



  • Ja da hab ich auch schon so bissel was in der Qt Doc gesehen, aber habe gedacht ich les da grad bestimmt falsch, weil mir ja gesagt wurde hier dass es nicht geht nur mit Qt.
    Scheint wohl aber doch zu gehen, dann lese ich mich da nochmal genau durch und probiere es=)
    Weiß einer wie ich denn dann wenn ich das pdf-file durchsucht habe und einen treffer gefunden habe, sprich ein wort stimmt mit einem gesuchten überein, wie ich die Datei direkt öffnen kann, zum Beispiel mittels Adobe Acrobat Reader...

    Danke schonmal

    Gruß freeG



  • fr33g schrieb:

    Ja da hab ich auch schon so bissel was in der Qt Doc gesehen, aber habe gedacht ich les da grad bestimmt falsch, weil mir ja gesagt wurde hier dass es nicht geht nur mit Qt.

    es wurde doch lediglich gesagt, dass es mit QFile (!) nicht geht, oder nicht?
    das schliesst ja QTextStream nicht mit ein ... 😉

    fr33g schrieb:

    Weiß einer wie ich denn dann wenn ich das pdf-file durchsucht habe und einen treffer gefunden habe, sprich ein wort stimmt mit einem gesuchten überein, wie ich die Datei direkt öffnen kann, zum Beispiel mittels Adobe Acrobat Reader...

    dazu muesste QDesktopServices::openUrl das richtige sein.

    mfg,
    julian



  • Julian__ schrieb:

    es wurde doch lediglich gesagt, dass es mit QFile (!) nicht geht, oder nicht?
    das schliesst ja QTextStream nicht mit ein ... 😉

    Richtig!



  • Ja stimmt ihr habt Recht, sorry hatte es verwechselt, hatte die Frage auch in nem anderen Forum gestellt gehabt :D.

    Dann les ich mich da jetzt mal durch.

    Vielen Dank

    gruß freeG

    EDIT:
    Mhh ich weiß leider nicht wie ich das richtig anstellen soll...hab schon probiert ein wort vom QTextStream direkt in nen String zu schreiben:

    QFile file( "test.pdf" );
    QTextStream data( &file );
    QString text;
    data >> text;
    

    Dann so wie oben blos in ein char Array und von dort in einen QString und ich habe noch probiert vom QTextStream in ein ByteArray und von da in nen QString...funzt leider alles net=(
    Wobei bei letzterer Möglichkeit immerhin keine komischen Zeichen mehr rauskamen sondern fast nur Zahlen und ein paar Buchstaben und Klammern.

    Weiß jemand vielleicht wie ich es hinbekomme.

    Schonmal Danke

    Gruß freeG



  • Mhh kann mir keiner helfen?



  • Schonmal dran gedacht, das file zu öffnen bevor du daraus liest?
    So macht es jedenfalls die Doku. Und erfahrungsgemäß sollte man sich an die (gute) Qt-Doku halten 😛



  • Ja sorry das hab ich vergessen richtig zu posten, war wohl ne zu kurze version;-), ich habs natürlich so probiert:

    QString name = QString( "%1%2" ).arg( suchpfad->text() ).arg( dateien.at( i ) );
            QFile datei( name );
            if( !datei.open( QIODevice::ReadOnly ) )
            {
                QMessageBox::critical( this, "Fehler", QString( "Die Datei '%1' konnte nicht geöffnet werden" ).arg( name ), QMessageBox::Ok );
            }
            else
            {
                // TextStream erzeugen
                QTextStream streamWort( &datei );
                QChar ch;
                QString wort;
                // solange die Datei nicht fertig gelesen wurde
                while( !streamWort.atEnd() )
                {
                    // eingelesenes Wort im QString test speichern
                    streamWort >> ch;
                    wort = ch;
                    // vergleichen ob gesuchtes Wort in wort ist
                    if( wort == suchwort)
                    {
                        // dateiname in ergebnis hinzufügen
                        ergebnis.append( name );
                    }
                }
            }
    

    Vielleicht kann mir jetzt jemand helfen:-P



  • Da hast du ja deutlich mehr verändert...
    Du weißt hoffentlich dass QChar != QString...
    http://doc.qt.nokia.com/4.6/qstring.html#operator-eq-7
    Ich denke nicht dass du das willst...
    Du machst ja auch nicht streamWort, sondern streamZeichen...



  • Sorry verstehe grad net was du meinst?
    Also ich will ja einfach nur die pdf einlesen und in nem QString oder sonst was haben.
    Aber das funzt ja leider net, dachte es geht vll indem ich den TextStream in ein QChar mache und von dort in nen QString.

    Weißt du denn wie ich das Problem lösen kann??
    Gruß freeG



  • fr33g schrieb:

    Weißt du denn wie ich das Problem lösen kann??

    Ja. indem du endlich mit den Versuchen aufhörst ein PDF mittels TextStream zu lesen.
    Das geht nicht! Öffne doch einfach mal ein PDF mit nem Texteditor.

    %PDF-1.4
    %����
    5 0 obj
    << /S /GoTo /D (section*.1) >>
    endobj
    8 0 obj
    (Contents)
    endobj
    9 0 obj
    << /S /GoTo /D (section*.2) >>
    endobj
    12 0 obj
    (List of Tables)
    endobj
    13 0 obj
    << /S /GoTo /D (section*.3) >>
    endobj
    16 0 obj
    (List of Figures)
    endobj
    17 0 obj
    

    Ich lass dich mal raten, was das für ein PDF ist.
    PDF ist kein PlainText! Wenn du unbedingt versuchen willst das PDF selber zu "entschlüsseln" musst du dir die Spezifikation anschauen. WIkipedia wird dir weiter helfen.

    Punkt.

    Und wie du drauf kommst dass der Umweg über nen QChar ne Lösung ist, versteh ich auch nicht...
    Ich denke da gibt es noch einiges an Misverständnissen.



  • Okidoki dankeschön=)

    dann lese ich mal noch ein bisschen und erkundige mich mal noch=)

    Aber danke

    Also ich habs jetzt mal mit Poppler probiert, denk mal so wie ichs jetzt habe würde es auch funktionieren...
    Jedoch bekomme ich immer eine Fehlermeldung beim builden, und zwar bekomm ich 4 warnungen undefined reference to imp___ZN7Poppler8Document4loadERK7QStringRK10QByteArrayS6_
    und eben noch 3 andere aber ähnliche Meldungen.

    Weiß auch net was ich mache, habe einfach so inkludiert:
    #include "C:/..blablabla/poppler-qt4.h"

    Wisst ihr vll wo der Fehler liegt?

    gruß freeG


Anmelden zum Antworten