Lire un fichier csv
Fermé
lynajar
Messages postés
32
Date d'inscription
dimanche 15 décembre 2019
Statut
Membre
Dernière intervention
9 février 2021
-
Modifié le 22 juin 2020 à 00:18
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 29 juin 2020 à 09:41
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 29 juin 2020 à 09:41
A voir également:
- Lire csv
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire epub - Guide
- Lire fichier bin - Guide
- Lire iso - Guide
- Lire fichier dat - Guide
5 réponses
lynajar
Messages postés
32
Date d'inscription
dimanche 15 décembre 2019
Statut
Membre
Dernière intervention
9 février 2021
Modifié le 22 juin 2020 à 12:42
Modifié le 22 juin 2020 à 12:42
Bonjour;
mon fichier csv est de la forme suivante:
j'ai creer le programme suivant:
je voudrais faire le meme calcule mais en utilisant un fichier csv qui contient n lignes et m colonnes
, je les déja fait en langage c mais en c++ je bloque
mon fichier csv est de la forme suivante:
j'ai creer le programme suivant:
#include <cstdlib> #include <iostream> using namespace std; int s[30][30]; int sim[30][30]; int m(5); int main(int argc, char *argv[]) { for(int i=0;i<3;i++) for(int j=0;j<m;j++){ cout<<"S["<<i<<","<<j<<"]=";cin>>s[i][j]; } for(int i=0;i<3;i++) { for(int j=i+1;j<3;j++) { sim[i][j]=0; for (int k(0);k<m;k++) { sim[i][j]=sim[i][j]+(s[i][k]+s[j][k]); } cout<<"sim["<<i<<"]["<<j<<"]="<<sim[i][j]<<endl; } } system("PAUSE"); return EXIT_SUCCESS; }
je voudrais faire le meme calcule mais en utilisant un fichier csv qui contient n lignes et m colonnes
, je les déja fait en langage c mais en c++ je bloque
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 22 juin 2020 à 19:39
Modifié le 22 juin 2020 à 19:39
Salut lynajar,
Concernant ton fichier csv, tu nous montres une image d'un affichage sur un tableur.
Un fichier csv est un fichier texte. Tu dois t'intéresser au contenu textuel de ton fichier texte, en l'ouvrant avec un éditeur de texte, car tu as besoin de savoir quel est le caractère séparateur utilisé dans le fichier csv pour pouvoir lire les données numériques qu'il contient et qui sont ainsi délimitées (cela peut être une virgule, un point-virgule, un caractère tabulation,...).
Ensuite, tu dois savoir ouvrir un fichier texte en C++, lire des lignes, et obtenir les entiers séparés par le caractère séparateur en question.
Tu peux éventuellement utiliser std::getline qui supporte un paramètre délimiteur pour ce faire.
http://www.cplusplus.com/reference/string/string/getline/
Dal
Concernant ton fichier csv, tu nous montres une image d'un affichage sur un tableur.
Un fichier csv est un fichier texte. Tu dois t'intéresser au contenu textuel de ton fichier texte, en l'ouvrant avec un éditeur de texte, car tu as besoin de savoir quel est le caractère séparateur utilisé dans le fichier csv pour pouvoir lire les données numériques qu'il contient et qui sont ainsi délimitées (cela peut être une virgule, un point-virgule, un caractère tabulation,...).
Ensuite, tu dois savoir ouvrir un fichier texte en C++, lire des lignes, et obtenir les entiers séparés par le caractère séparateur en question.
Tu peux éventuellement utiliser std::getline qui supporte un paramètre délimiteur pour ce faire.
http://www.cplusplus.com/reference/string/string/getline/
Dal
lynajar
Messages postés
32
Date d'inscription
dimanche 15 décembre 2019
Statut
Membre
Dernière intervention
9 février 2021
Modifié le 23 juin 2020 à 00:20
Modifié le 23 juin 2020 à 00:20
Bonsoir ;
merci Dal pour ton aide;
j'ai réussi a lire mon fichier csv, mais maintenant comment faire pour appliquer quelques formules mathématiques sur les [i][j] de la matrice.
merci Dal pour ton aide;
j'ai réussi a lire mon fichier csv, mais maintenant comment faire pour appliquer quelques formules mathématiques sur les [i][j] de la matrice.
#include <stdlib.h> #include <iostream> #include <fstream> #include <sstream> #include <iostream> #include <stdlib.h> #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <cstdio> #include <string.h> #include <cstdlib> using namespace std; int main() { ifstream file("C:/Users/click/Desktop/exemple.csv"); string line; vector<int> vec; while (getline(file, line)) { cout << line << endl; istringstream ss(line); string word; while (getline(ss, word,';')){ double value = strtod(word.c_str(), NULL); // cnversion string to double vec.push_back(value); //remplissage du vecteur } } //Affichage du vecteur for (int i = 0; i < vec.size(); i++){ //cout << vec[i] << '\n'; } //cout << vec[0] << " " << vec [1] ; system("pause"); return 0; }
lynajar
Messages postés
32
Date d'inscription
dimanche 15 décembre 2019
Statut
Membre
Dernière intervention
9 février 2021
Modifié le 23 juin 2020 à 00:21
Modifié le 23 juin 2020 à 00:21
voici un autre essai en utilisant array:
maintenant comment faire pour inclure le code suivant:
#include <string> #include <sstream> #include <iostream> #include <vector> #include <fstream> using namespace std; int main() { //const string filename = "C:/Users/click/Desktop/exemple.csv"; ifstream filename("C:/Users/click/Desktop/exemple.csv"); // open the file string line, field; vector< vector<string> > array; // the 2D array vector<string> v; // array of values for one line only if (!filename) // error if the file doesn't exist { cerr << "Can't open file " << filename << endl; return 1; } while ( getline(filename,line) ) // get next line in file { v.clear(); stringstream ss(line); while (getline(ss,field,';')) // break line into comma delimitted fields { v.push_back(field); // add each field to the 1D array } array.push_back(v); // add the 1D array to the 2D array } // print out what was read in for (size_t i=0; i<array.size(); ++i) { for (size_t j=0; j<array[i].size(); ++j) { cout << array[i][j] << " | "; // (separate fields by |) } cout << "\n"; } system("pause"); return 0; }
maintenant comment faire pour inclure le code suivant:
for(int i=0;i<3;i++) { for(int j=i+1;j<3;j++) { sim[i][j]=0; for (int k(0);k<m;k++) { sim[i][j]=sim[i][j]+(s[i][k]+s[j][k]); } cout<<"sim["<<i<<"]["<<j<<"]="<<sim[i][j]<<endl; } }
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
23 juin 2020 à 09:31
23 juin 2020 à 09:31
si ce sont des int que tu veux stocker en mémoire, pourquoi déclares tu des vecteurs de string ?
vector< vector<string> > array; // the 2D array vector<string> v; // array of values for one line only
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lynajar
Messages postés
32
Date d'inscription
dimanche 15 décembre 2019
Statut
Membre
Dernière intervention
9 février 2021
27 juin 2020 à 01:11
27 juin 2020 à 01:11
Bonsoir;
en exécutant mon programme avec plusieurs essai d'affichage j'ai compris que le programme considère les valeurs du fichier comme des variable de type string,
c'est la remarque qu'il ma fait "Dal"
j'ai essayer de changer le type en int mais ça na pas marché;
j'ai une erreur au niveau de cette ligne:
erreur:
31 C:\Users\click\Desktop\doctorat\programmation\proj3\main.cpp no matching function for call to `std::vector<int, std::allocator<int> >::push_back(std::string&)'
note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_vector.h:557 candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int, _Alloc = std::allocator<int>]
j'ai besoins d'une aide pour avancer dans mon code,
en exécutant mon programme avec plusieurs essai d'affichage j'ai compris que le programme considère les valeurs du fichier comme des variable de type string,
c'est la remarque qu'il ma fait "Dal"
vector< vector<string> > array; // the 2D array vector<string> v;
j'ai essayer de changer le type en int mais ça na pas marché;
vector< vector<int> > array; // the 2D array vector<int> v;
j'ai une erreur au niveau de cette ligne:
v.push_back(field); // add each field to the 1D array
erreur:
31 C:\Users\click\Desktop\doctorat\programmation\proj3\main.cpp no matching function for call to `std::vector<int, std::allocator<int> >::push_back(std::string&)'
note C:\Dev-Cpp\include\c++\3.4.2\bits\stl_vector.h:557 candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int, _Alloc = std::allocator<int>]
j'ai besoins d'une aide pour avancer dans mon code,
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 29 juin 2020 à 09:42
Modifié le 29 juin 2020 à 09:42
Puisque
getline()récupère les entiers sous la forme d'un chaîne string, tu dois convertir chaque valeur récupérée sous cette forme en int avant de pouvoir "pousser" l'entier dans le vecteur d'int.