IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Lecture de QString dans fichier binaire


Sujet :

Qt

  1. #1
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut Lecture de QString dans fichier binaire
    Bonjour,

    j'ai un soucis avec la lecture d'un fichier binaire que je lis avec QDataStream.
    En réalité dans ce fichier sont stocké seulement des séries de 5 QString.
    Ces QString comprennent des sauts de lignes.
    Comment puis je les lire?
    Je ne suis même pas sur que ce soit possible...

    Merci par avance
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut
    Citation Envoyé par katanaenmousse Voir le message
    Bonjour,

    j'ai un soucis avec la lecture d'un fichier binaire que je lis avec QDataStream.
    En réalité dans ce fichier sont stocké seulement des séries de 5 QString.
    Ces QString comprennent des sauts de lignes.
    Comment puis je les lire?
    Je ne suis même pas sur que ce soit possible...

    Merci par avance
    Quel est ton souci exactement?

    Peut être utiliser http://qt.developpez.com/doc/latest/...erator-gt-gt-4

  3. #3
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Salut,
    Mon soucis est qu'en réalité je ne suis pas sur que l'on puisse ecrire plusieurs QString dans un fichier binaire et ensuite que l'ont réussisse à lire le fichier binaire en séparant les QString.
    Car si j'ai bien compris, quand on lit un fichier binaire, il faut savoir la longueur de la variable que l'ont veut lire. Or, il me semble que QString n'a pas une longueur fixe si? (par longueur j'entend nbre d'octets)
    Donc si je veux lire le fichier je ne sais pas où commence et s'arretent mes variables QString.
    Je me trompe?

    Si je me trompe, comment puis je faire pour stocker mes QString (qui contiennent des espaces et des saut de lignes) dans un fichier, et ensuite les lire?
    la je galere encore

    ------
    Pour faire complet :
    En fait je tente de sauvegarder les données suivantes et de les relires ensuite à partir du fichier.
    QString contenant le nom d'un film
    QString contenant le nom de l'acteur principal
    QString contenant une description du film (avec des sauts de lignes)
    Et bien sur, il y a plusieurs films
    ------

    PS: Je ne peux pas utiliser les QTextStream du fait que mes variables string contiennent des sauts de lignes. Je ne pourrais pas les reconstituer ensuite à la lecture.
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par katanaenmousse Voir le message
    PS: Je ne peux pas utiliser les QTextStream du fait que mes variables string contiennent des sauts de lignes. Je ne pourrais pas les reconstituer ensuite à la lecture.


    Pour comprendre,
    Qu'es ce que tu veut stoker dans ton fichier?? Que tu texte?

  5. #5
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Citation Envoyé par Mongaulois Voir le message


    Pour comprendre,
    Qu'es ce que tu veut stoker dans ton fichier?? Que tu texte?
    J'étais en train de préciser grace a un edit de mon precedent post : désolé
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par katanaenmousse Voir le message
    PS: Je ne peux pas utiliser les QTextStream du fait que mes variables string contiennent des sauts de lignes. Je ne pourrais pas les reconstituer ensuite à la lecture.
    et pourquoi????
    Je ne voie pas en quoi un saut de ligne est problématique

    Ton problème est que tu n'as pas (ou mal) structuré ton fichier.... Du coup t'as ce problème.
    Faire un fichier binaire pour du text, ce n'est pas très logique.... Surtout que tu va te trouver avec plein de problème lié au binaire pour que ton fichier soit lue sur toute le plateforme.


    Tu devrais utilise QXml (ou autre lib xml) pour lire/écrire ton fichier
    http://qt.developpez.com/doc/latest/qtxml.html

  7. #7
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Je sais que la solution QXml est meilleure, mais je ne sais pas encore m'en servir, et je pensais aussi profiter de mon exemple pour apprendre les fichier binaires.
    Cela dit je vais tenter le QXml.
    Pour ce qui est du QTextStream, il y a un pb vu que ma variable contient des sauts de lignes et que le separateur des fichiers text est un saut de ligne, il y aura forcement confusion non?
    Merci a toi encore
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par katanaenmousse Voir le message
    Je sais que la solution QXml est meilleure, mais je ne sais pas encore m'en servir, et je pensais aussi profiter de mon exemple pour apprendre les fichier binaires.
    Cela dit je vais tenter le QXml.
    A toi de juger

    Citation Envoyé par katanaenmousse Voir le message
    Pour ce qui est du QTextStream, il y a un pb vu que ma variable contient des sauts de lignes et que le separateur des fichiers text est un saut de ligne, il y aura forcement confusion non?
    Merci a toi encore
    TU peut lire ligne par ligne.
    -La première le nom d'un film
    -a deusième le nom de l'acteur
    -tant que ligne non cide
    {
    lecture de la description du film
    }

    Le gros avantage avec le xml, est que tu va surement ajouter petit à petit des informations et que la lecture ne dépendra pas de la manière dont c'est écrit, mais de la structure de tes balises.

  9. #9
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Pour le XML, je devrai creer de nouvelles balises à chaque nouveau film traité non?
    ca devrait donner un truc comme ca :

    <film1>
    <titre> titre1 </titre>
    <acteur> acteur1 </acteur>
    <resumer> resume 1
    sur plusieurs lignes </resumer>
    </film1>
    <film2>
    <titre> titre2 </titre>
    <acteur> acteur2 </acteur>
    <resume> resume 2
    sur plusieurs lignes </resume>
    </film2>


    C est bien ca?
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Salut,

    Oui, c'est une façon d'entrée du contenu dans un fichier XML. N'oublie pas qu'il faut également un "noeud racine", que tu ouvres tout au début, et que tu ferme tout à la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <liste des films>
    <film1/>
    ....
    <film14/>
    </liste des films>
    Cependant, en utilisant le module xml de Qt, tu n'as théoriquement pas à te soucier des balises.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Cependant, en utilisant le module xml de Qt, tu n'as théoriquement pas à te soucier des balises.
    Comment cela?

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Ce que j'ai peur c'est que notre ami katanaenmousse utilise "l'écriture simple de fichiers texte" pour créer son fichier xml. Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QFile monFichier("pasBien.xml");
    monFichier.open(QIODevice::WriteOnly | QIODevice::Text);
    QTextStream out(&monFichier);
    out<<"<film1>"<<"Big Fish"<<"</film1>";
    Alors qu'avec QXmlStreamWriter il suffit de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    monStreamWriter.writeTextElement("monFilm","Big Fish");
    ou encore :
    monStreamWriter.writeStartElement("film1");
    monStreamWriter.writeCharacters("BigFish");
    monStreamWriter.writeEndElement();
    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Ce que j'ai peur c'est que notre ami katanaenmousse utilise "l'écriture simple de fichiers texte" pour créer son fichier xml. Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QFile monFichier("pasBien.xml");
    monFichier.open(QIODevice::WriteOnly | QIODevice::Text);
    QTextStream out(&monFichier);
    out<<"<film1>"<<"Big Fish"<<"</film1>";
    Alors qu'avec QXmlStreamWriter il suffit de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    monStreamWriter.writeTextElement("monFilm","Big Fish");
    ou encore :
    monStreamWriter.writeStartElement("film1");
    monStreamWriter.writeCharacters("BigFish");
    monStreamWriter.writeEndElement();
    G.
    ha ok.
    Faut mieux utiliser les outil fait pour cela. C'est claire.

  14. #14
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Non, non pas d inquietude je ne vais pas faire un fichier xml comme un fichier text.
    Je tente de comprendre comment ecrire et lire un fichier xml avec QtXml (QDomDocument QDomElement ....)
    J espere que je suis sur la bonne voie, mais j trouve pas de tuto simple a ce sujet enfin bref j continue de chercher... :p
    Merci encore a vous deux
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  15. #15
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

  16. #16
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Interessant mais je prefererai utiliser les QDomDocument et le reste pas les QXmlStreamWriter et autres...
    cela dis pour mois les fichiers XML ca parait lourd a gerer comparer a un fichier binaire
    J vais arreter pour aujourd hui j ai trop chercher d exemple en vain, je melange tout la
    je reprendrai plus tard , j en peux plus
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    DOM et SAX sont plutôt des méthodes permettant de parser (parcourir) un document, XML dans notre cas. Ces méthodes sont donc utiles pour la lecture et/ou la modification d'un fichier déjà existant (par exemple, si tu veux modifier le résumé d'un de tes films dans ton futur fichier xml, ou ajouter un champ "date de sortie").

    Il est donc inutile de les utiliser pour écrire ton fichier. Utilise plutôt les QXmlStreamWriter, en t'appuyant sur l'exemple envoyé par Mongaulois, ou directement sur la description de la classe ad hoc (http://qt.developpez.com/doc/latest/...eamwriter.html).

    Bien sûr, il est nécessaire, si besoin, de se renseigner un minimum sur XML afin de vraiment comprendre le sujet et sa raison d'être. Je ne peux pour cela que t'orienter vers Wikipedia, ou des cours plus simples selon ton niveau (que tu trouveras sûrement sur developpez.com).

    Bonne chance,

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  18. #18
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Pour en revenir au premier post,
    j'ai utilisé un editeur hexa pour lire un fichier binaire que jai fait avec des QString.
    en fait chaque QString est séparé par 3 octets (00 00 00)
    Ce qui permet de distinguer ces QString, meme quand ils ont des sauts de ligne et des espaces.
    Donc je conserve mon fichier binaire, pas besoin de xml
    je gere ca comme un fichier text
    sauf qu'a la place de QTextStream j utilise QDataStream
    pour le lire j utilise une boucle de cin >>
    que je stocke dans des vectors
    Voila ca fonctionne bien comme ca
    Il n'empeche que vous m'avez intrigué avec votre XML et je vais devoir essayer de le faire aussi en XML pour la culture :p
    Merci a vous deux pour votre patience, je ne sais pas si j ai été clair mais le problème est réglé

    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  19. #19
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    En faite, j'y ai pensé hier soir. Les class Qt savent s'ecrit et se lire un un flux binaire. Donc tu peut écrie tes string une à la suite des autre et les relire. Le '\n' ne changera rien. Tu peut même lui faire écrire des Qlist et autre. Pour des type à toi il faut jouer avec les meta donné. Mais c'est du hors sujet.

    Donc oui ça marchera, mais je ne sait pas si cela est compatible entre diverse version de Qt (à vérifier).

    Utiliser un fichier xml, n'est pas si compliqué, beaucoup plus propre et surtout plus souple.

    Bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture zstring dans fichier binaire
    Par olibara dans le forum C#
    Réponses: 0
    Dernier message: 17/08/2009, 12h58
  2. [VS2005]lecture/écriture dans fichier binaire
    Par shadowmoon dans le forum Windows Forms
    Réponses: 10
    Dernier message: 25/09/2007, 17h30
  3. Lecture nombre flottant dans fichier
    Par Mikolay dans le forum C
    Réponses: 17
    Dernier message: 29/03/2007, 09h26
  4. Ecriture dans fichier binaire
    Par kek_net dans le forum Langage
    Réponses: 2
    Dernier message: 26/07/2006, 13h42
  5. Lecture et parcours de fichiers binaires
    Par john_osaka dans le forum C++
    Réponses: 1
    Dernier message: 07/03/2006, 20h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo