2011-08-04 3 views
3

Hier, j'ai fait un petit script avec de l'aide pour lire les fichiers .csv. J'ai bien trouvé un moyen de lire la première valeur et de la stocker, mais pour une raison quelconque, elle stocke la dernière valeur à la place.Lecture des valeurs des champs d'un fichier .csv?

Je stocke ce que je pensais être la première valeur sous value1, et je l'affiche de nouveau pour m'assurer qu'il s'affiche correctement et qu'il est en fait stocké sous une variable appelable.

Est-ce que quelqu'un sait ce qui ne va pas avec ce code? Je pense que je devrais utiliser des vecteurs mais en lisant les feuilles de référence que je trouve sur Internet à leur sujet, je suis un peu jeté. Toute aide est appréciée.

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 

    int loop = 1; 
    string value; 
    string value1; 

    while(loop = 1) 
    { 

     cout << "Welcome! \n" << endl; 

     ifstream myfile; 

     myfile.open ("C:/Documents and Settings/RHatfield/My Documents/C++/Product Catalog Creator/Source/External/Sample.csv"); 

     while (myfile.good()) 

     getline (myfile, value, ','); 
     cout << string (value) << endl; 

     value1 = value; 

     cout << value1; 

     myfile.close(); 

     system("PAUSE"); 

     return 0; 
    } 


} 
+0

Dupliquer de la question suivante: http://stackoverflow.com/questions/1120140/csv-parser-in-c –

Répondre

1

Votre erreur semble être en format de code pur.

while (myfile.good()) 

Il n'y a pas de {} après la boucle. Donc, seule la ligne suivante est répétée.

Le code suivant est exécuté après la lecture du fichier entier.

cout << string (value) << endl; 

Ainsi, value stocke la dernière ligne du fichier.

+0

Oui votre droit, mais quand je l'ai réparé, il fait la même chose, ne listant tous les évalue un par un, puis stocke le dernier et le re-listant. Est-ce que quelqu'un sait où je peux trouver un bon matériel de référence pour cela parce que maintenant je suis encore plus confus par les résultats. Merci pour l'aide cependant, juste beaucoup d'apprentissage devant moi. – Rob

+0

@Rob, maintenant c'est un problème algorithmique pur. Il y a beaucoup de solutions. Si vous voulez seulement obtenir la première ligne, vous n'avez besoin d'aucune boucle. Remplacez simplement while par une instruction if. –

+0

Encore une fois vous avez raison, mais ne dis pas que je voulais tirer des données de ligne (un certain nombre) et colonne (un certain nombre), que pourrais-je faire, ou simplement dire ligne de lecture (un certain nombre) et retourner toutes les valeurs. Je ne peux pas changer à nouveau la boucle while. Est-ce là où les vecteurs entrent? – Rob

0

Vous pouvez changer la condition dans votre while boucle:

char separator; 
int value1; 
int value2; 
int value3; 
while (myfile >> value1) 
{ 
    // Skip the separator, e.g. comma (',') 
    myfile >> separator; 

    // Read in next value. 
    myfile >> value2; 

    // Skip the separator, e.g. comma (',') 
    myfile >> separator; 

    // Read in next value. 
    myfile >> value3; 

    // Ignore the newline, as it is still in the buffer. 
    myfile.ignore(10000, '\n'); 

    // Process or store values. 
} 

Le fragment de code ci-dessus n'est pas robuste, mais démontre le concept de la lecture d'un fichier, en sautant des séparateurs non numériques et de traitement de la fin de la ligne. Le code est optimisé non plus.

Questions connexes