Moyen le plus simple pour lire des fichiers CSV --> Tableau

Moyen le plus simple pour lire des fichiers CSV --> Tableau - C++ - Programmation

Marsh Posté le 24-02-2018 à 13:12:55    

Salut !
 
Je pense que tout est dit dans le titre ...Quel est le moyen le plus simple pour lire des fichiers CSV --> Tableau
 
Merci par avance.

Reply

Marsh Posté le 24-02-2018 à 13:12:55   

Reply

Marsh Posté le 09-05-2018 à 12:14:44    

Bonjour, le plus simple que je connaisse, comme c'est un tableau, l'ouvrir avec microsoft Excel.
 
Qui lui permet d'ouvrir les fichiers CSV.
Bien sûr, comme c'est du texte, pour respecter les données.
il faudra indiquer pour chaque collone à l'ouverture, indiquer que la collone c'est du format Texte.
 
Comme cela identiquement, j'ouvre des fichiers TXT contenant des chiffres hexadécimal.
 
Attention, si tu utilise l'ancienne version de Excel (2003), celle ci est limiter à uniquement 256 collones par ligne.
Donc tu ne pourra pas afficher plus que un tableau maximum de 256 collones.
 
si tu dispose de la version Sun office, il faut que tu regarde par toi même si il ouvre les fichiers CSV, identiquement que Excel.
 
 
mais si toi, tu souhaite lire un fichier CSV à travers le C++, j'ai uniquement trouvé en language VB net.
http://www.planet-source-code.com/ [...] &lngWId=10
 
donc tu n'a qu'a l'utiliser en tant que base, et le regonfler d'après ta propre vision.


Message édité par philippe474 le 09-05-2018 à 12:24:18
Reply

Marsh Posté le 09-05-2018 à 14:36:34    

Non. Tableau ne veut pas dire tableau Excel que je sache.
Si c'est un CSV, l'algo est tellement simple qu'il vaut pas la peine de s'étendre dessus:
 
1) ouvrir le fichier en lecture
2) tant qu'il y a des lignes, faire
    - lire une ligne
    - exploser la ligne en champs suivant le délimiteur
    - tant qu'il y a des champs a remplir dans la structure tableau cible faire
      - remplir le champ avec celui de la source (ou une valeur par défaut (0, ''...) si on a épuisé la source), éventuellement après conversion texte -> nombre.
3) fermer le fichier
 
Bref une boucle de lecture contenant une boucle de tokenisation et basta.
 
A+,


Message édité par gilou le 09-05-2018 à 14:37:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-05-2018 à 09:22:42    

Bonjour Gilou.
 
Excel ou son hommologue de Sun sont des tableurs ont est bien d'accord.
Ainsi il dispose déjà des cases.
Et ce que tu explique avec le délimiteur, ont le fait exactement identiquement, lorsque ont ouvre un fichier texte (.txt ou .CSV) ou la personne, lui suffira juste de sélectionné chaque délimitation a ses données, que il souhaitera avoir une séparation représenté en texte soit par un espace ou une virgule ou point virgule.
 
et un tableau peut, si le format du fichier est pris en compte par le tableur, être ouvert par le tableur.
 
Ici sa question, il aurais du plutôt mieux la décrire, si c'est en programmation, ou si il souhaitait pouvoir ouvrir et lire les données à travers un logiciel existant déjà.
 
Pour l'explication que tu as donné, ici je ne souhaite même pas rentrer dans la discussion.
Comme je te l'ai expliquer, c'est la question posé par la personne, qui est sujet à toutes les réponses, en raison, que il lui suffisait juste de spécifier son choix.

Reply

Marsh Posté le 12-05-2018 à 10:03:42    

Bonjour,
 
Nous sommes dans la catégorie programmation du forum et le sujet est dans la sous-catégorie C++, mais oui la personne pourrait repréciser.  :hello:


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 12-05-2018 à 10:06:56    

On est dans un topic Programmation C++, pas dans un topic logiciel Excel.
Dans un contexte programmation C++, un tableau a un sens précis comme type de données. Dans ce conteste, sa question (cf le titre) signifie "comment puis-je remplir une structure de type tableau à partir de données CSV contenues dans un fichier" (si ce n'est pas le cas, il n'a qu'a spécifier correctement son problème au lieu de dire "tout est dans le titre" ).
D'autre part, il n'a pas dit ensuite ce qu'il comptait faire des données lues, on peut donc supposer, dans un contexte de programmation, qu'il va les exploiter dans la suite de son programme C++ (bref, rien ne dit qu'il veut juste afficher des données).
Et vu que l'auteur a déjà créé des sujets spécifiques relatifs à la programmation C++ sur ce forum, cf https://forum.hardware.fr/hfr/Progr [...] 6495_1.htm par exemple, ça a un sens de lui répondre dans ce contexte.
[incidemment jujuf1, plutôt que remplir un tableau bi-dimensionnel, remplir un vecteur de tableau unidimensionnel (ta ligne découpée en champs) serait peut-être plus adapté à tes besoins]
 
Et sinon, dans un contexte programmation hors C++, pour manipuler des données, il y a des langages particulièrement adaptés comme perl (et donc sans doute aussi python), qui lisent un fichier CSV dans une structure perl en une ligne de code, quitte ensuite à l'utilisateur d'exploiter les données lues.
 
Parce que si c'est juste pour visualiser le contenu d'un fichier CSV, pas besoin d'avoir recours à Excel, un coup de clic Google et on trouve par exemple ceci: http://www.becsv.com/csv-viewer.php qui, en plus de visualiser, permet aussi, entre autres, de convertir un fichier CSV en tableau HTML, format bien plus universel (car ne nécessitant pas un logiciel propriétaire) pour une visualisation de données.
 
 
A+,
Edit@MaybeEijOrNot: Nos posts se sont croisés.

Message cité 1 fois
Message édité par gilou le 12-05-2018 à 10:23:45

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-05-2018 à 19:33:01    

Salut à tous. Merci pour vos réponses. J’avoue avoir mis de côté mon projet c++ pour le moment  
 
Merci et @+

Reply

Marsh Posté le 10-06-2018 à 14:51:54    

gilou a écrit :

[incidemment jujuf1, plutôt que remplir un tableau bi-dimensionnel, remplir un vecteur de tableau unidimensionnel (ta ligne découpée en champs) serait peut-être plus adapté à tes besoins]


Pourquoi faire un vecteur de tableaux et pas un vecteur de vecteurs ?
 

Reply

Marsh Posté le 11-06-2018 à 20:15:25    

Parce que a priori, chaque ligne de son tableau a un même nombre de champ (en général c'est ainsi que sont fait les CSV), donc on peut coller ça dans une structure qui va pas croitre ou diminuer.
Par contre, comme on ne connait pas le nb de lignes, on va mettre ça dans une structure qui va croitre.
 
A+,


Message édité par gilou le 11-06-2018 à 20:16:35

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-06-2018 à 23:06:57    

Je m'attendais à un truc plus mystique [:joce]

Reply

Marsh Posté le 11-06-2018 à 23:06:57   

Reply

Marsh Posté le 02-10-2018 à 00:27:02    

Tu ouvres ton fichier en lecture, tu fais des getlines, et tu tokenises avec le séparateur utilisé (mieux vaut le connaitre).
Tu enquilles chaque token dans un vecteur, un vecteur par ligne.
Jusqu'à la fin du fichier.
 
J'ai fait ça c't'aprèm, ça passait tout seul.
 
C'est un peu plus compliqué si tu veux des accès par colonne simple, mais pas tant que ça. Tu peux créer une map de string vers size_t si tu as des colonnes propres avec un identifiant en première ligne, et faire ton parcours en colonne en parcourant le vecteur de vecteurs.
 
J'avais déjà utilisé des libs sur sourceforge pour gérer des CSV, mais toutes celles que j'ai testées sont de sombres bouses immondes et ratées (ok, j'ai pas dû bien chercher). Ca va mieux d'y aller à la main que de reprendre un projet étudiant de 1ère année vendu comme une lib éprouvée.


Message édité par vectra le 02-10-2018 à 00:29:27
Reply

Marsh Posté le 02-10-2018 à 14:37:46    

boost/tokenizer et basta.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-10-2018 à 11:48:01    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed