我正在尝试使用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 。
感谢您的帮助!
加布里埃尔