Détecter newline octet de filestream
Je suis en train de recueillir des informations à partir d'un fichier texte qui contient les noms des organisations (sans les espaces) et flottant entiers. Je veux stocker ces informations dans un tableau de structure.
Le problème, je vais avoir jusqu'à présent est la collecte de l'information. Voici un exemple de fichier texte:
ABC 12.3 4.5 7.5 2.9 4.1
TLS 3.9 1 8.6 12.8 4.9
Je peux avoir jusqu'à 128 numéros différents pour chaque organisation, et jusqu'à 200 organisations dans le fichier texte.
C'est ce que ma structure ressemble à ce jour:
struct callCentre
{
char name[256];
float data[20];
};
Ma principale:
int main()
{
callCentre aCentre[10];
getdata(aCentre);
calcdata(aCentre);
printdata(aCentre);
return 0;
}
Et la fonction getdata:
void getdata(callCentre aCentre[])
{
ifstream ins;
char dataset[20];
cout << "Enter the name of the data file: ";
cin >> dataset;
ins.open(dataset);
if(ins.good())
{
while(ins.good())
{
ins >> aCentre[c].name;
for(int i = 0; i < MAX; i++)
{
ins >> aCentre[c].data[i];
if(ins == '\n')
break;
}
c++;
}
}
else
{
cout << "Data files couldnt be found." << endl;
}
ins.close();
}
Ce que je suis en train de réaliser dans ma fonction getdata est-ce: stocker le nom de l'organisation, d'abord dans la structure, puis de lire chaque flotteur dans le tableau de données jusqu'à ce que le programme détecte un retour à la ligne octet. Cependant, jusqu'à présent, mon chèque pour le retour à la ligne de l'octet n'est pas de travail.
Supposons que les variables c et MAX sont déjà définis.
Comment dois-je m'y prendre correctement?
Vous devez vous connecter pour publier un commentaire.
Ou
(Edit): Vous aurez envie de vérifier pour un eof après votre peek(), car certains fichiers peuvent ne pas avoir une fin de saut de ligne.
Je tiens à souligner que vous pouvez envisager d'utiliser un
vector<callCentre>
au lieu d'un tableau statique. Si votre fichier d'entrée longueur dépasse la capacité de la matrice, vous allez marcher sur les pieds de la pile.L' >> opérateur traite d'espaces comme un délimiteur, et qui comprend des retours à la ligne, donc il mange juste celles et on ne les voit jamais.
Vous avez besoin de lire des lignes et puis les hacher les lignes vers le haut. Le bit suivant de hackery illustre l'idée de base:
Je voudrais lire le fichier, une ligne après l'autre et analyser chaque ligne individuellement pour les valeurs: