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

C++ Discussion :

Affichage et comportement �trange d'istringstream


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2013
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Par d�faut Affichage et comportement �trange d'istringstream
    Salut � vous !

    J'essaie de faire une fonction qui a plus ou moins pour but de lire un fichier de filtre. Pour cela j'utilise istringstream afin de pouvoir s�parer les mots. Normalement j'arrive � m'en servir sans probl�me. Mais l� il se passe un truc assez zarbi : selon les lignes, mon istringstream semble avoir une attaque c�r�brale ou un truc du genre, et me sors plusieurs fois la m�me ligne � l'affichage. Pire encore : lorsque j'essaie de lire les mots, j'ai l'impression que mon istringstream ne r�cup�re jamais le premier mot de la ligne, ce qui est mine de rien assez probl�matique.

    Voil� ma fonction : c'est en r�alit� un constructeur pour une classe qui prend une liste de filtres en param�tres.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    FilterList::FilterList(string fileName)
    {
        ifstream file(fileName.c_str(), ios::in);
        string line, str;
        string args[2];
        bool lecture = false;
        if (!file)
        {
            cerr << "Erreur de lecture du fichier de filtre" << endl;
        }
        while (getline(file, line))
        {
            //cout << line << endl;
            istringstream ss(line);
            while (getline(ss, str, ' '))
            {
                //cout << lecture << endl;
                //cout << "istringstream" << endl;
                cout << ss.str() << endl;
                if (str != "")
                {
                    //cout << "Lecture ligne non vide" << endl;
                    ss >> args[0] >> args[1];
     
                    //cout << args[0] << endl;
                    //cout << args[1] << endl;
     
                    if (args[0] == "###")
                    {
                        if (!lecture)
                        {
                            //cout << "lecture = true" << endl;
                            lecture = true;
                            continue;
                        }
                        else
                        {
                            //cout << "lecture = false" << endl;
                            lecture = false;
                            continue;
                        }
                    }
     
                    if (lecture)
                    {
                        cout << args[0] << " " << args[1] << endl;
                        filters.push_back(args[1]);
                        cout << filters.at(filters.size()-1) << endl;
                    }
                }
            }
            ss.clear();
        }
        file.close();
    }
    Et voil� ce � quoi ressemble le fichier que je dois lire :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    De: [email protected] de la part de stats-sna-rp [[email protected]]
    Envoyé: mardi 23 juin 2015 10:58
    À: olivier brillant
    Objet: Tr : Demande VISTA Survols de Commune
     
     
    -------- Message d'origine --------
    De: [email protected]
    Date: 23 juin 2015 10:47:37
    Objet: Demande VISTA Survols de Commune
    A: [email protected]
     
     
    ### VISTA-SC ### CERCLE ### JOURNEE ORDINAIRE ### SUPERPOSITION DE TRACES ###
     
     
     
    EMETTEUR [email protected]
     
    MODE JOURNEE_ORDINAIRE
     
    nb_indicatifs 2
     
    indicatif_1 AF*
     
    indicatif_2 VG
     
    _choix_props OUI
     
    _choix_jets OUI
     
    _choix_heli OUI
     
    _choix_typa_inconnus OUI
     
    _choix_heavy OUI
     
    _choix_light OUI
     
    _choix_medium OUI
     
    _fl_mini 001
     
    _fl_max 60
     
    _tracer_lignes_points Lignes
     
    _choix_cercle_echelle OUI
     
    _deborder_cercle NON
     
    _FOND_CARTO aucun
     
    _TRACER_DEPARTEMENT NON
     
    _TRACER_COMMUNES OUI
     
    _TRACER_TXT_VILLES NON
     
    _echelle CDG5
     
    _mode_comptage CERCLE
     
    _nb_traj_max toutes
     
    Date_1 01/06/2015
     
    Date_2 02/06/2015
     
    Date_3 03/06/2015
     
    Date_4 04/06/2015
     
    Date_5 05/06/2015
     
    Date_6 06/06/2015
     
    Date_7 07/06/2015
     
    Date_8 08/06/2015
     
    Date_9 09/06/2015
     
    Date_10 10/06/2015
     
    Date_11 11/06/2015
     
    Date_12 12/06/2015
     
    Date_13 13/06/2015
     
    Date_14 14/06/2015
     
    Date_15 15/06/2015
     
    _nb_superposition 15
     
    _X_lambert1 603716
     
    _Y_lambert1 2414730
     
    nom_ville_long OL
     
    _rayon 5
     
    _LFPO_DEP OUI
     
    _LFPO_ARR OUI
     
    _LFPN_DEP NON
     
    _LFPN_ARR NON
     
    _LFPV_DEP NON
     
    _LFPV_ARR NON
     
    _LFPG_DEP OUI
     
    _LFPG_ARR OUI
     
    _LFPB_DEP NON
     
    _LFPB_ARR NON
     
    _LFPT_DEP OUI
     
    _LFPT_ARR OUI
     
    _AUTRE_DEP NON
     
    _AUTRE_ARR NON
     
     
    REQUETE VISTA_CERCLE_L2E.ilv
     
    flag_une_couleur_par_indicatif NON
     
    _flag_masquer_indicatif NON
     
    _new_mode_arr_dep OUI
     
    _mode_fichiers_z NON
     
    _fichiers_z_format_geo NON
     
    _mode_eff_polylines_si_pas_comptee OUI
     
    _mode_gommer_polylines_si_pas_comptee NON
     
    _mode_nuage_de_points NON
     
    _mode_superposition OUI
     
    _mode_images_separees NON
     
    _mode_un_jour_une_couleur_de_plot NON
     
    _toggle_modulo_fl_avions NON
     
    _toggle_modulo_indicatif NON
     
    _toggle_modulo_fl_hhmmss_avions NON
     
    _modulo_fl_avions 10
     
    MODE_JOUR_NUIT MODE_JOUR_NUIT
     
    VAL_JOUR_NUIT PAS_FILTRE_HEURE_ARRIVEE
    ### FIN MESSAGE ###
    G_Version = 2015.03
    WLogicielMail = ORLY_CMIT_TOUR.
    Une id�e ? :/

    Merci d'avance pour votre r�ponse.

  2. #2
    Expert confirm�

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Software Developer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par d�faut
    Bonjour!

    Tu ne melangerais pas les pinceaux?
    Tu mixes l'utilisation d'un str et de ss de maniere assz etrange, notamment la:
    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
            istringstream ss(line);
            while (getline(ss, str, ' '))
            {
                //cout << lecture << endl;
                //cout << "istringstream" << endl;
                cout << ss.str() << endl;
                if (str != "")
                {
                    //cout << "Lecture ligne non vide" << endl;
                    ss >> args[0] >> args[1];
     
                    //cout << args[0] << endl;
                    //cout << args[1] << endl;
     
                    if (args[0] == "###")
    la, args[0] ne pourra jamais valoir "###", vu que c'est str qui le contiendra, du coup tune passes jamais dans ton code interessant.

    Et sinon:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (!lecture)
    {
        //cout << "lecture = true" << endl;
        lecture = true;
        continue;
    }
    else
    {
        //cout << "lecture = false" << endl;
        lecture = false;
        continue;
    }
    lecture = !lecture ?
    et un else au lieu du continue pas beau?

    Ensuite string::empty est la fonction pour tester si une chaine est vide, pas une comparaison avec "".

    Que cherches-tu exactement a faire?
    J'ai modifie ton code pour avoir ca:
    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
     
    if (!file)
    {
    	cerr << "Erreur de lecture du fichier de filtre" << endl;
    }
    else
    {
    	string line;
    	bool lecture = false;
     
    	while ( getline( file, line ) )
    	{
    		istringstream ss( line );
    		string str;
    		ss >> str;
    		string args[2];
    		cout << "line: [" << line << "]" << endl;
     
    		if ( str == "###" )
    		{
    			lecture = !lecture;
    		}
    		else if ( !str.empty() && lecture )
    		{
    			ss >> args[0] >> args[1];
    			cout << "args: " << args[0] << " - " << args[1] << endl;
    			filters.push_back(args[1]);
    			cout << filters.at(filters.size()-1) << endl;
    		}
    	}
    }
    Qui me produit l'output suivant:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    line: [### VISTA-SC ### CERCLE ### JOURNEE ORDINAIRE ### SUPERPOSITION DE TRACES ###]
    line: [ ]
    line: [ ]
    line: [ ]
    line: [EMETTEUR [email protected]]
    args: [email protected] -
     
    line: [ ]
    line: [MODE JOURNEE_ORDINAIRE]
    args: JOURNEE_ORDINAIRE -
     
    line: [ ]
    line: [nb_indicatifs 2]
    args: 2 -
     
    line: [ ]
    line: [indicatif_1 AF*]
    args: AF* -
     
    line: [ ]
    line: [indicatif_2 VG]
    args: VG -
     
    line: [ ]
    line: [_choix_props OUI]
    args: OUI -
     
    line: [ ]
    line: [_choix_jets OUI]
    args: OUI -
     
    line: [ ]
    line: [_choix_heli OUI]
    args: OUI -
     
    line: [ ]
    line: [_choix_typa_inconnus OUI]
    args: OUI -
     
    line: [ ]
    line: [_choix_heavy OUI]
    args: OUI -
     
    line: [ ]
    line: [_choix_light OUI]
    args: OUI -
     
    line: [ ]
    line: [_choix_medium OUI]
    args: OUI -
     
    (...)
     
    line: []
    line: [### FIN MESSAGE ###]
    Je ne suis pas sur que ce soit exactement ce que tu recherches, mais je pense que ca s'en approche...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).

  3. #3
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2013
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Par d�faut
    En effet c'est pas du tout ce que je cherche � faire. Remarque je n'ai pas expliqu� non plus.

    Ce que je veux faire, c'est lire et garder en variable toute la partie situ�e entre les deux lignes avec des "###", dans le but de faire un syst�me de filtres. Le premier mot, qui d�signe le nom du filtre, va dans args[0], le deuxi�me, qui d�signe l'argument du filtre, va dans args[1]. Pour d�terminer si je passe bien sur un "###" j'ai d�cid� de faire un contr�le bool�en.

  4. #4
    Expert confirm�

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Software Developer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par d�faut
    Et bien, je ne suis pas loin de ce que tu recherches, puisqu'en fait tu peux donc jeter args[1] et ne jouer qu'avec str et args[0] (et donc tu peux d�clarer args en tant que string et plus en tant que string[2]).

    Je te laisse voir comment faire, je pense t'avoir bien m�ch� le boulot:
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).

  5. #5
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2013
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Par d�faut
    Ouais, j'ai pas mal avanc� et tu m'as pas mal aid�. J'ai juste un petit probl�me avec mon contr�le bool�en, mais je pense que je devrais pouvoir m'en sortir sans trop de probl�mes. :p

    Merci encore.

  6. #6
    Membre �clair�
    Homme Profil pro
    Cocher moderne
    Inscrit en
    Septembre 2006
    Messages
    50
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : Oman

    Informations professionnelles :
    Activit� : Cocher moderne

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Par d�faut
    Citation Envoy� par Einde Voir le message
    J'ai juste un petit probl�me avec mon contr�le bool�en, mais je pense que je devrais pouvoir m'en sortir sans trop de probl�mes.
    Tant que c'est pas avec ton contr�le a�rien...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Affichage/Masquage et comportements �tranges
    Par stof dans le forum G�n�ral JavaScript
    R�ponses: 14
    Dernier message: 29/03/2012, 17h34
  2. [AJAX] Affichage d'une infobulle : Comportement �trange
    Par patricklinden dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 30/10/2007, 23h36
  3. comportement �trange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    R�ponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Syst�me][Runtime][Exec] Comportement �trange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    R�ponses: 1
    Dernier message: 06/06/2004, 09h54
  5. R�ponses: 2
    Dernier message: 22/09/2003, 11h23

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