getline()跳过第一行文本文件(C ++)

时间:2017-04-22 16:53:55

标签: c++ text ifstream getline

我正在尝试使用C ++从文本文件中读取信息。虽然,每当我尝试用 ifstream 读取它时,我的程序就会一直跳过文本文件的第一行。这是我的代码:

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <list>

using namespace std;
#include "Fichiers.h"


void Fichiers::OuvrirFichierLecture()
{

    int compteChamps = 1;
    int compteurValeurs = 0;        


    try {
        ifFichier.open(nomFichier, ios::in);

        if (!ifFichier)
        {
            throw("Erreur 01: Fichier \"" + nomFichier + "\" introuvable.");
        }
    }
    catch (string& messageErreur)
    {
        cout << messageErreur << endl <<
        "Un redémarrage du programme est nécessaire. Veuillez vérifier que tous les" << endl <<
        "fichiers texte se retrouvent dans le dossier du programme avant de relancer." << endl;
    }


    ifFichier.clear();
    ifFichier.seekg(0, ios::beg);


    if (ifFichier)      
    {
        string ligne;
        int compteurLigne = 0;

        while (getline(ifFichier, ligne))
        {

            if(nomFichier == "utilisations.txt"     
            {

                int NAS, chambre;
                string codePS, etablissement, date, dateFin;

                string ligneActuelle = ligne;       // temporary cariable


                // How many ;s are there in the actual line
                for (int i = 0; i < ligneActuelle.length(); i++)
                {
                    if (ligneActuelle[i] == ';')
                    {
                        compteChamps++;
                    }
                }


                // Then, according to the number of ;s, the information will be stocked differently
                string statut;

                if (compteChamps == 4)
                    statut = "Rendez-vous";
                else if (compteChamps == 6)
                    statut = "Hospitalisation";


                // Reading & saving information
                if (statut == "Rendez-vous")
                {
                    ifFichier >> NAS;
                    ifFichier.ignore(1, ';');

                    getline(ifFichier, codePS, ';');

                    getline(ifFichier, etablissement, ';');

                    getline(ifFichier, date);



                    // Insertion of the values in an array
                    TableauValeurs[compteurValeurs] = to_string(NAS);
                    TableauValeurs[compteurValeurs + 1] = codePS;
                    TableauValeurs[compteurValeurs + 2] = etablissement;
                    TableauValeurs[compteurValeurs + 3] = date;

                    compteurValeurs += 4;       // 4 values inserted
                }
                else if (statut == "Hospitalisation")
                {

                    ifFichier >> NAS;
                    ifFichier.ignore(1, ';');

                    getline(ifFichier, codePS, ';');

                    getline(ifFichier, etablissement, ';');

                    getline(ifFichier, date, ';');

                    getline(ifFichier, dateFin, ';');

                    ifFichier >> chambre;
                    ifFichier.ignore(1, '\n');



                    TableauValeurs[compteurValeurs] = to_string(NAS);
                    TableauValeurs[compteurValeurs + 1] = codePS;
                    TableauValeurs[compteurValeurs + 2] = etablissement;
                    TableauValeurs[compteurValeurs + 3] = date;
                    TableauValeurs[compteurValeurs + 4] = dateFin;
                    TableauValeurs[compteurValeurs + 5] = to_string(chambre);               

                    compteurValeurs += 6;       // 6 values inserted 

                }

                compteChamps = 1;
            }

            compteurLigne++;
        }

    }

    nbValeurs += compteurValeurs;

}

问题是:虽然“ligneActuelle”正确读取了我的文本文件的第一行并获取了其值,但 ifFichier&gt;&gt;例如,NAS 将读取下一行的信息。

我还验证了某些 cin.ignore()是否缺失,情况并非如此。

以下是我正在尝试阅读的文本文件示例(utilisations.txt):

6360;NC-108;CH de saint-jérôme;2004-05-30;2004-08-02;342
6361;N-123;CHSLD du Nord;2006-04-18
6361;NC-108;CLSC de l'Est;2008-03-20
1600;OB-331;CH de saint-jérôme;2003-06-30;2003-08-07;1608
1600;MG-132;CH Hotel-Dieu;2010-05-31

例如,在代码的开头, ligneActuelle 等于“ 6360; NC-108; CH de saint-jérôme; 2004-05-30; 2004-08-02; 342 “,但 ifFichier&gt;&gt; NAS; 将读取 6361

感谢您的帮助!

加布里埃尔

0 个答案:

没有答案