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 :

Rechercher une chaîne de neuf caractères dans un fichier ou un QByteArray


Sujet :

Qt

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 13
    Points
    13
    Par défaut Rechercher une chaîne de neuf caractères dans un fichier ou un QByteArray
    Bonjour,

    Je dois chercher une chaîne de 9 caractères dans un fichier CSV et en fonction de cette chaîne, déplacer le fichier dans une répertoire qui contient cette chaîne.

    (tri d'un fichier par rapport au numéro de série qui s'y trouve).

    Voilà comment j'ai fait.

    J'ai mis mon fichier dans un QByteArray,
    J'ai compté le nombre de séparateurs existants et lu les 9 prochains caractères.

    Maintenant je sais pas si je peux soit chercher directement dans le fichier la chaîne de 9 caractères ou chercher la chaîne de 9 caractères dans le QByteArray ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
        QByteArray tableau;
     
        for(uint i=0; i<csvFileDir.count(); i++)
        {
            QString path = csvFileDir.path().append("/");
     
            path.append(csvFileDir.entryList().at(i));
     
            QFile* file = new QFile(path);
     
            if( file->open( QIODevice::ReadOnly ) )
            {
                tableau = file->readAll();
                file->close();  // done with file
            }
     
            unsigned long index = 0;
            unsigned long nbSplit = 0;
     
            do
            {
                if(tableau.at(index) == ';')
                    nbSplit++;
                index++;
            }
            while(nbSplit < (ulong)NB_SEPARATOR && index < (ulong)tableau.size());
     
            QString fid;
     
            for(uint x=0; x<9; x++)
                fid.append(tableau.at(index++));
     
            fidList.append(fid);
        }
     
        ui->CSV_list->addItems(fidList);

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Je ne suis pas sûr d'avoir compris la question. Dés que tu veux comparer des chaînes dans un fichier, tu es obligé de lire en mémoire, en l'occurrence chercher dans ton QByteArray.

    Si tu cherches un moyen de rechercher tes 9 caractères plus facilement, dans ton cas je ne vois pas comment faire. J'imagine que le nombre de caractères avant ce qui t'intéresse varie selon les fichiers. Si tes caractères sont toujours précédés d'une certaine chaîne tu pourrais la chercher avec indexOf.

    Sinon tu es obligé de boucler sur tes séparateurs, mais tu peux faire plus facilement avec une boucle de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int index = 0;
    int i = 0;
    while(i < NB_SEPARATOR && index > 0)
    {
        ++i;
        index = tableau.indexof(";", index) + 1;
    }
    // Si index vaut zéro, le fichier est mal formé
    QString fid(tableau.mid(index, 9));

  3. #3
    Membre régulier
    Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par vbovbo Voir le message

    Je dois chercher une chaîne de 9 caractères dans un fichier CSV

    Maintenant je sais pas si je peux soit chercher directement dans le fichier la chaîne de 9 caractères
    Bonjour,

    Ci-après une petite fonction qui me sert pour trouver une chaîne de caractères dans une cellule (entre 2 ';') d'un fichier csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    bool Lecture(string maCelluleCSV){
     
        string repere("LeMotATrouver");
        size_t found;
     
        found = sj_modif.find(repere);
     
        if (found != string::npos)
            return true;
        else
            return false;
    }
    Bon courage

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Merci pour les infos.

    En faite la chaîne de 9 charactères est un numéro de série.
    C'est la seule chaîne qui fait 9 charactères(chiffres).

    Le nombre de séparateur n'est pas stable. Voir même le séparateur peux changer.

    Aucun mot spécifique apparait. Je pourrais regarder pour demander aux développeurs de changer ça. Ce serait la solution la plus simple.

    Je vais continuer à chercher.

  5. #5
    Membre averti Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Points : 413
    Points
    413
    Par défaut
    Bonjour,

    Puisque tu recherches une chaîne à 9 chiffres, une méthode rapide serait d'utiliser les expressions régulières.

    http://shugo.developpez.com/tutoriels/regexqt/

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Cette chaîne est variable(le contenu). La seule chose qui est fixe, c'est que c'est la première chaîne de 9 chiffres dans le fichiers csv.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Bon bon bon....

    Alors j'ai pu trouver une réference. Donc je recherche ma référence et je prends les 9 prochains caractères après les 4 de ma référence (référence à 3 charactères + séparateur).


    unsigned long index = 0;
    index = tableau.indexOf("REF",0); //REF = la chaîne de charactère de références précédent la chaîne que je désire mémoriser.

    QString serialnumber;
    //lecture des 9 prochains caractères après l'index de la référence
    for(uint x=4; x<13; x++)
    serialnumber.append(tableau.at(index + x));
    //j'implémente le string serialnumber de chaque charactères entre les 4 et 13 prochains suivant ma référence.

    Merci pour votre aide

  8. #8
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Pense à mettre la discussion en si tu as toutes les réponses à ta question

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/01/2010, 01h01
  2. Réponses: 3
    Dernier message: 13/05/2008, 13h11
  3. Rechercher une chaîne de caractère dans une série de fichier
    Par Edoxituz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2006, 12h51
  4. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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