Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > Qt
Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 10h53   #1
Invité de passage
 
Vincent
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 0
Points : 0
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 :
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);
vbovbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 11h33   #2
Modérateur
 
Avatar de ymoreau
 
Homme Yoann Moreau
Ingénieur en laboratoire de recherche
Inscription : septembre 2005
Messages : 723
Détails du profil
Informations personnelles :
Nom : Homme Yoann Moreau
Âge : 26
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur en laboratoire de recherche
Secteur : Enseignement

Informations forums :
Inscription : septembre 2005
Messages : 723
Points : 1 128
Points : 1 128
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 :
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));
ymoreau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 12h08   #3
Nouveau Membre du Club
 
Responsable d'un système d'information métier
Inscription : janvier 2011
Messages : 39
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 : 39
Points : 30
Points : 30
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 :
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
dasycarpum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 07h17   #4
Invité de passage
 
Vincent
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 0
Points : 0
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.
vbovbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 07h30   #5
Membre éclairé
 
Avatar de hariman
 
Homme Luc Hariman RANDRIANOMENJANAHARY
Développeur Java
Inscription : janvier 2008
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Luc Hariman RANDRIANOMENJANAHARY
Localisation : Ile Maurice

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

Informations forums :
Inscription : janvier 2008
Messages : 175
Points : 349
Points : 349
Envoyer un message via MSN à hariman Envoyer un message via Skype™ à hariman
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/
hariman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 14h49   #6
Invité de passage
 
Vincent
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 0
Points : 0
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.
vbovbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 15h16   #7
Invité de passage
 
Vincent
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 0
Points : 0
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
vbovbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 10h29   #8
Modérateur
 
Avatar de ymoreau
 
Homme Yoann Moreau
Ingénieur en laboratoire de recherche
Inscription : septembre 2005
Messages : 723
Détails du profil
Informations personnelles :
Nom : Homme Yoann Moreau
Âge : 26
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur en laboratoire de recherche
Secteur : Enseignement

Informations forums :
Inscription : septembre 2005
Messages : 723
Points : 1 128
Points : 1 128
Pense à mettre la discussion en si tu as toutes les réponses à ta question
ymoreau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h34.


 
 
 
 
Partenaires

Hébergement Web