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 :

Lecture de fichier avec commentaires


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut Lecture de fichier avec commentaires
    Bonjour à tous,

    Je cherche à lire un fichier qui contient des données que je dois rentrer dans un tableau.
    Le problème c'est que les données dans le fichier sont séparées pas des lignes de commentaires.

    Je cherche donc à trouver un moyen de sauter ces lignes pour ne pas faire "planter" ma lecture du fichier.
    Pour l'instant la méthode que j'ai envisagé est de rentrer les lignes de commentaire dans une string et de continuer ma lecture une fois l'opération faite.
    Le problème c'est que ça ne marche pas.

    Je ne sais pas si la méthode que j'utilise est la plus adaptée ni même si est est valide mais voici mon code pour l'instant.

    Code C++ : 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
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
     
    int main() {
    	int i, j;
     
    	string chaine = "";
    	fstream file3;
     
    	double RecadrageX1_SED1[5][5], RecadrageX2_SED1[5][5], RecadrageY1_SED1[5][5], RecadrageY2_SED1[5][5];
     
    	file3.open("Recadrage.cal", fstream::in);
       	if (file3.is_open()) {
     
    		getline(file3, chaine);
       		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageX1_SED1[i][j];
    				cout << RecadrageX1_SED1[i][j] << endl;
    			}
    		}
     
       		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageX2_SED1[i][j];
    				cout << RecadrageX2_SED1[i][j] << endl;
    			}
    		}
     
    		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageY1_SED1[i][j];
    				cout << RecadrageY1_SED1[i][j] << endl;
    			}
    		}
     
       		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageY2_SED1[i][j];
    				cout << RecadrageY2_SED1[i][j] << endl;
    			}
    		}		
                    file3.close();
            } else 
                cout << "file3 not found"  <<endl; 
             return 0;
    }

    Le fichier de données source est construit de la manière suivante :
    //première ligne : commentaire
    //seconde ligne commentaire, début d'une serie de 5 données
    5 lignes de données consécutives
    //commentaire
    5 lignes de données consécutive
    .
    .
    .
    etc

    Le programme compile et s'execute mais les valeurs affichées par le cout ne sont pas les bonnes : la première serie de 5 nombres lus est cohérente mais la seconde ne l'est plus. (les nombres affichés sont délirants)
    J'en déduit donc que le getline que j'ai fait n'est pas effectif ou ne fonctionne pas bien mais je ne comprends pas pourquoi.

    Si vous avez une explication ou une autre méthode je suis preneur.

    Merci d'avance



    Edit :

    J'ai résolu le porblème "à la main" : à force de faire des cout des valeurs que je sortais et ce que contient la string j'ai identifié les endroits où ça plantait et j'ai modifié mon code comme suit : (voir les ajouts en bleu)

    Code C++ : 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
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int main() {
    	int i, j;
    	
    	string chaine = "";
    	fstream file3, file4;
    	
    	double RecadrageX1_SED1[5][5], RecadrageX2_SED1[5][5], RecadrageY1_SED1[5][5], RecadrageY2_SED1[5][5];
    
    	file3.open("Recadrage_SED1.cal", fstream::in);
       	if (file3.is_open()) {
    		
    		getline(file3, chaine);
       		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageX1_SED1[i][j];
    				cout << RecadrageX1_SED1[i][j] << endl;
    				if (j==4)
    					getline(file3, chaine);
    			}
    		}
    
       		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageX2_SED1[i][j];
    				cout << RecadrageX2_SED1[i][j] << endl;
    				if (j==4)
    					getline(file3, chaine);
    			}
    		}
    		
    		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageY1_SED1[i][j];
    				cout << RecadrageY1_SED1[i][j] << endl;
    				if (j==4) 
    					getline(file3, chaine);
    			}
    		}
    		
       		for (i=0;i<5;i++) {
    			getline(file3, chaine);
    			for (j=0;j<5;j++) {
    				file3 >> RecadrageY2_SED1[i][j];
    				cout << RecadrageY2_SED1[i][j] << endl;
    				if (j==4)
    					getline(file3, chaine);
    			}
    		}
    		file3.close();
       } else
       cout << "file3 not found"  <<endl; 
       
       return 0;
    }

    Tel quel le code compile et s'execute correctement.
    Le problème... c'est que je ne comprends pas du tout pourquoi c'est le cas. :ack:
    Pour moi il y a des getline "en trop" et donc le code ne devrait pas fonctionner.
    De plus sans ces ajouts le programme plantait lors de la seconde boucle de chaque série, or, avec ces modifications, on n'agit que sur la fin de la boucle.
    Du coup je suis un peu perdu.

    Edit 2 :
    J'ai peut-être une hypothèse : je pensais que le "file >>" faisait systématiquement un retour à la ligne, mais si on admet que ce n'est pas le cas cela explique la necessité de faire 2 getline : le premier prend la fin de la ligne et le second saute celle non désirée.
    Si j'ai bien compris le problème est le même que celui souligné dans cet article.
    Si vous pouviez confirmer/infirmer cette supposition. (et si au passage vous avez une méthode plus propre que celle que j'utilise je vous en serai gré)

    P.S. Désolé si mon problème peut sembler simpliste, mais je débute en C++ et mes recherches sur internet / Developpez.com n'ont rien donné de concluant...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je pense que d'abord il faut savoir ce que vous lisez.
    Si j'ai bien compris il s'agit d'un fichier comportant des données groupées par blocs de 5 (5 lignes). Pour la clarté de la relecture, l'opérateur a rajouté une ligne de commentaire entre chaque bloc.
    La distinction entre les données et les commentaire est faite par la distinction entre '//' et autre-chose.
    Mais en fait, s'agit-il réellement de groupes de 5 données ou au contraire, chaque ligne constitue une donnée supplémentaire? Je penche plutôt pour cette deuxième hypothèse, mais sans voir ni le fichier, ni l'énoncé, ça n'est que supposition.
    De toute façon, il faut revoir votre code, mais je crois vous avoir donné les pistes nécessaires.

    bon courage.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Bonjour,
    Si j'ai bien compris il s'agit d'un fichier comportant des données groupées par blocs de 5 (5 lignes). Pour la clarté de la relecture, l'opérateur a rajouté une ligne de commentaire entre chaque bloc.
    La distinction entre les données et les commentaire est faite par la distinction entre '//' et autre-chose.
    Mais en fait, s'agit-il réellement de groupes de 5 données ou au contraire, chaque ligne constitue une donnée supplémentaire? Je penche plutôt pour cette deuxième hypothèse, mais sans voir ni le fichier, ni l'énoncé, ça n'est que supposition.
    .
    Effectivement chaque ligne correspond à une donnée supplémentaire : certaines de ces lignes (blocs de données) sont séparées par des commentaires pour faciliter la relecture on a typiquement la forme suivante

    //a
    1
    2
    3
    4
    5
    //b
    6
    7
    8
    9
    10
    //c
    ...etc
    J'espère que c'est plus parlant comme ceci.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Regardes du coté des streambuff filtrant, boost en propose (dans iostream il me semble), sinon les articles de James Kanze, il propose d'ailleur ce que tu veut faire comme exemple.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui,
    Donc, il ne s'agit pas de bloc de 5 données, mais d'un certain nombre de données, peut-être un code spécial en fin de fichier (par exemple 999), et des commentaires à sauter.
    A vous de faire le programme, je ne le ferai pas à votre place. Mais je veux bien corriger ou vous guider pour la nouvelle version.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour Flob90,
    Autant que Daish donne directement l'adresse du lien dans son compte rendu d'exercice. Ce sera plus rapide à corriger.
    Mais comme le programme à réaliser ne fera probablement pas beaucoup plus de 5 lignes, quelle décision prendre?

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Je voyais ca comme un problème qui apparait dans un programme plus vaste, pas comme un exercice. Il ne reste que si c'est un exercice, il peut lire les articles de James Kanze et faire son propre streambuf filtrant, c'est un bon moyen pour enlever les commentaire qui peut être une solution viable à un exercice.

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    Regardes du coté des streambuff filtrant, boost en propose (dans iostream il me semble), sinon les articles de James Kanze, il propose d'ailleur ce que tu veut faire comme exemple.
    Merci de l'information j'y jetterai un coup d'oeil la prochaine fois que j'ai besoin de faire ce genre de manip.

    Citation Envoyé par Pierre Dolez Voir le message
    Oui,
    Donc, il ne s'agit pas de bloc de 5 données, mais d'un certain nombre de données, peut-être un code spécial en fin de fichier (par exemple 999), et des commentaires à sauter.
    A vous de faire le programme, je ne le ferai pas à votre place. Mais je veux bien corriger ou vous guider pour la nouvelle version.
    Merci de la proposition, mais comme je l'ai précisé dans le premier message la seconde version du programme compile et est fonctionnelle, le truc c'est que je ne sais pas vraiment pourquoi : je n'ai que des hypothèses et j'aimerai bien comprendre ce problème, car à mon avis, il y a surement quelque chose que je n'ai pas bien compris avec les streams.

    Je vais néanmoins jeter un coup d'oeil aux streambuff filtrant pour éventuellement le réécrire (si je trouve le temps) plus proprement.

    P.S. je precise d'ailleurs que le fichier source est créé par moi-même, j'y ajoute personnellement les commentaires dans l'hypothèses ou quelqu'un aurait besoin de se servir du programme un jour.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bon, alors je vais vous aider par des questions.
    1- pourquoi utilisez-vous des tableaux double, alors qu'il s'agit manifestement d'int.
    2- pourquoi prévoyez-vous 5 tableau de 25 positions, alors qu'apparemment il n'y aura que 25 valeurs?
    3- pourquoi prévoyez-vous 5 tableaux alors que chaque ligne est inépendante des autres et qu'il ne s'agit pas de 5 blocs de 5 lignes?
    4- que se passera-t-il si l'utilisateur oublie une ligne de commentaire, ou au contraire en met 2, de même, s'il y a une ligne blanche?
    5- êtes-vous sûr que les les tableaux RecadrageX2_SED1 et suivants sont renseignés?
    Voilà.

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    @Pierre Dolez : si tu ne comprends pas la question, n'insiste pas

    @Daish
    Je pense que ça à voir avec ces quelques lignes de la norme (c'est moi qui mets en gras) :
    Citation Envoyé par "22.2.2.1.2 num_get virtual functions - ¤16"
    The in iterator is always left pointing one position beyond the last character successfully matched. If val is set, then err is set to str.goodbit; or to str.eofbit if, when seeking another character to match, it is found that (in == end). If val is not set, then err is set to str.failbit; or to (str.failbit|str.eofbit) if the reason for the failure was that (in == end). [Example: For targets true: "a" and false: "abb", the input sequence "a" yields val == true and err == str.eofbit; the input sequence "abc" yields err = str.failbit, with in ending at the ’c’element. For targets true: "1" and false: "0", the input sequence "1" yields val == true anderr == str.goodbit. For empty targets (""), any input sequence yields err ==str.failbit. —end example]
    qui décrit la position de in à la fin de la lecture avec la fonction iter_type do_get(iter_type in, iter_type end, ios_base& str, ios_base::iostate& err, bool& val). Sachant qu'il est dit un peu plus loin qu'un flux>>val_ correspond à cet appel (par le truchement du bon facet). En gros, la dernière valeur lue d'une ligne positionne le flux à std::eofbit. Ensuite, std::getline n'est pas exécuté car le flux a le flag std::eofbit levé, donc flux.good() retourne false, donc le sentry à l'entrée de std::getling évalue à faux.
    Enfin, je concède que tout ça n'est pas d'une clarté cristalline. Je pense que l'idée à retenir est de ne pas mélanger les opérateurs >> et les std::getline impunément.
    Ainsi, une solution simple (mais certainement non optimale) aurait été d'utiliser getline pour lire les lignes puis std::stringstream pour en extraire les données formatées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::getline(file3, chaine);// commentaire
       for (i=0;i<5;i++) {
    	std::getline(file3, chaine); // commentaire
    	for (j=0;j<5;j++) {
          std::getline(file3, chaine); // donnee
          std::istringstream iss(chaine); // extraction par un stringstream
    		iss >> RecadrageX1_SED1[i][j];
    		cout << RecadrageX1_SED1[i][j] << endl;
    	}
    }

  11. #11
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut Merci à tous
    Ah...
    Bon je dois concéder que je n'ai pas tout compris à l'explication technique mais l'idée que je retiens c'est que je ne dois pas mélanger les "" << "" avec les getline.

    Merci pour le code je pense que je vais faire ça pour faire quelque chose de plus propre.

    En tout cas merci à tous de votre aide.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    C'est pas très flexible tous ça .
    L'intérêt des commentaires est de pouvoir les placer où l'on veut sans qu'il perturbe la lecture du fichier. Or ici si on rajoute la moindre ligne de commentaire c'est plantage assuré. Si ces commentaires prennent toujours une ligne entière pourquoi ne pas utiliser le bout de programme de 3DArchi, tester tous simplement si la chaine récupéré par getline ne commence pas par un "//" et l'ignorer dans ce cas ?

    EDIT :

    un ptit bout de code pour illustrer :

    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
     
    	for (i=0;i<5;i++) {
    	    for (j=0;j<5;j++) {
    		do{
    		    std::getline(file3, chaine);
    		}while (chaine.size() >= 2 && chaine[0] == '/' && chaine[1] == '/');
    		//tant que c'est un commentaire, on boucle
     
    		std::istringstream iss(chaine); // extraction par un stringstream
    		iss >> RecadrageX1_SED1[i][j];
    	    }
    	}
     
     
    	for (i=0;i<5;i++) {
    	    for (j=0;j<5;j++) {
    		cout << RecadrageX1_SED1[i][j] << endl;
    	    }
    	    cout << endl;
    	}
    c'est du vite fais un peu bourrin mais tu peux rajouter autant de commentaires que tu veux, tant qu'ils commencent la ligne, ils ne perturbent pas la lecture.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour 3DArchi
    @Pierre Dolez : si tu ne comprends pas la question, n'insiste pas
    Par contre, si je n'ai pas compris las question atttchoum l'a comprise, lui. Et le code qu'il a écrit, est à peu près ce que j'essayais de suggérer à Daish, pour l'aider, mais surtout sans écrire le code à sa place .
    Merci

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut
    Tout à fait d'accord pour dire que ce n'est pas flexible. ^_^
    Merci de m'aider à corriger un peu ça.

    Par contre pour reprendre ton code il me semble qu'il y a un problème : si j'ai bien compris tu ne "mets" dans ton getline que les commentaires, du coup tu sors tout du fichier, sauf les données à extraire.

    Est ce qu'il ne faudrait pas faire quelquechose comme ça ?

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (i=0;i<5;i++) 
    	for (j=0;j<5;j++) {
                    std::getline(file3, chaine); //on prend la ligne
    		if(chaine[0] =! '/' && chaine[1] =! '/') { //si la ligne ne commence pas par //
    			std::istringstream iss(chaine); // extraction par un stringstream
    			iss >> RecadrageX1_SED1[i][j];
    		}
            }

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour Daish,
    En tout cas, moi je confirme, le code de atttchoum est bon, et à mon avis il correspond bien à la question posée et dans le cas général, à la méthode à employer.

  16. #16
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut
    Merci de l'aide,
    C'est sur que cette méthode est beaucoup plus propre que la mienne et s'applique avec plus de souplesse à de nombreux cas.

    J'ai finalisé le code à partir de vos idées : il compile et s'execute parfaitement. Je le poste dans le cas ou quelqu'un chercherait à faire la même chose.

    Code C++ : 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
     
    		i=0;
    		j=0;
    		while (i<5) {
            		getline(file3, chaine);
    				if(chaine.size() > 0 && chaine[0] != '/') {
    					istringstream iss(chaine,istringstream::in);
    					iss >> RecadrageX1_SED1[i][j];
    					if (j!=4) {
    						j++;
    					} else {
    						i++;
    						j=0;
    					}
    				} 
    		}
    Je ne sais pas si c'est le plus esthétique ni le plus optimale mais en tout cas ça marche bien et on a certaine liberté dans la structure du fichier à lire.

    Encore merci à tous.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Désolé, votre code n'est pas bon.
    Ce n'est pas parce qu'il "compile et s'exécute correctement" qu'il peut servir d'exemple.
    Essayez au moins de comprendre le code de Atttchoum. Celui-là est bon.
    La question posée est vraiment élémentaire.
    Bon courage.

  18. #18
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut
    Au temps pour moi,
    j'avais effectivement mal compris le fonctionnement du do while (au vu de différents exemples). Le code d'atttchoum est donc effectivement bon.

    Je me suis donc evertué à contourner quelque chose de simple pour le rendre inutilement lourd.
    Mais mise à part cette lourdeur inutile, j'aimerai comprendre en quoi ma version est mauvaise. L'algortihme et la syntaxe ne me semble pas faux.

    Edit : A la réflexion je me pose une question sur le do while de atttchoum : si j'ai bien compris l'opération "getline(file1, chaine);" sera effectué tant que l'on vérifera la condition "chaine.size() > 2 && chaine[0] != '/' && chaine[1] != '/'".
    De fait elle lira tous les commentaires et saut de ligne et s'arretera à la première ligne de données rencontrée.
    Il faudrait donc rajouter un getline supplémentaire pour prendre cette ligne de donnée puis la rentrer dans le tableau via istringstream.

    Ai-je tord ? Et si oui, en quoi ?

  19. #19
    Invité
    Invité(e)
    Par défaut
    Oui.
    Je n'ai pas vérifié les incrémentations de i et de j, je suppose qu'elles sont bonnes.
    La question était "Sauter les commentaires".
    Un commentaure est caractérisé par la présence de 2 '/'. Tout ce qui suit doit être ignoré.
    Je crois que le code de Atttchoum ne teste que les slash en début de ligne, ce n'est pas faux mais c'est incomplet (il n'a jamais dit que son code était général).
    Par contre, votre code ne teste que UN SEUL slash, et ça c'est une faute.
    Autre chose, que se passe-t-il s'il y a une ligne blanche ?
    La question posée était "Sauter les commentaires".
    Atttchoum les saute, c'est à dire "Si la ligne commence par '//', on continue la lecture.
    Vous, si la ligne est vide, vous continuez la lecture comme si c'était un commentaire. Cela pourrait être bon dans certains contextes, mais ici, il s'agissait de "Sauter les commentaires".

    Par ailleurs, je n'ai toujours pas compris pourquoi vous faites un tableau à deux dimensions, pourtant vous m'avez bien confirmé que chaque ligne était indépendante des autres, apportait une information supplémentaire, et que donc la notion de "bloc de 5 lignes" n'existait pas.

    Relisez les 5 questions que je vous ai posées il y 2 jours.
    Voila

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Citation Envoyé par Daish Voir le message
    Edit : A la réflexion je me pose une question sur le do while de atttchoum : si j'ai bien compris l'opération "getline(file1, chaine);" sera effectué tant que l'on vérifera la condition "chaine.size() > 2 && chaine[0] != '/' && chaine[1] != '/'".
    De fait elle lira tous les commentaires et saut de ligne et s'arretera à la première ligne de données rencontrée.
    Il faudrait donc rajouter un getline supplémentaire pour prendre cette ligne de donnée puis la rentrer dans le tableau via istringstream.

    Ai-je tord ? Et si oui, en quoi ?
    en fait le do...while lit une ligne et si celle ci est un commentaire elle prend la suivante et ce jusqu'à ce que la ligne ne soit pas un commentaire.
    en gros cela permet d'ignorer les commentaires (dés qu'on en vois un on passe). le principe est de ne pas avoir a compter les commentaires et faire comme s'ils n'existaient pas (ce qui est le principe d'un commentaire).

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. quelques soucis de lecture de fichiers avec fscanf
    Par monsieurab dans le forum Bibliothèque standard
    Réponses: 2
    Dernier message: 05/11/2008, 14h28
  2. Lecture de fichier avec fread.Taille limitée?
    Par cheveche4 dans le forum C
    Réponses: 5
    Dernier message: 15/06/2007, 14h56
  3. lecture de fichier avec comparaison
    Par idsec dans le forum Web
    Réponses: 1
    Dernier message: 25/04/2007, 17h25
  4. lecture de fichier avec ftplib
    Par yggdrazil dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 14/10/2006, 21h47
  5. [LG]Lecture de fichier avec une adresse internet
    Par forbin dans le forum Langage
    Réponses: 8
    Dernier message: 09/02/2005, 19h00

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