Petit souci de séparateur en C++
Résolu
KiraX10A
Messages postés
231
Date d'inscription
Statut
Membre
Dernière intervention
-
KiraX10A Messages postés 231 Date d'inscription Statut Membre Dernière intervention -
KiraX10A Messages postés 231 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous.
Mon problème est le suivant:
J'ai un fichier (que j'appellerai "fichier.csv") qui se compose de la manière suivante:
NOM MAGAZINE1;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
NOM MAGAZINE2;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
NOM MAGAZINE3;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
NOM MAGAZINE4;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
...
NOM MAGAZINEX;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
Ce que je dois faire, c'est ouvrir ce fichier et ne récupérer que les colonnes NOM MAGAZINE et TARIFS.
J'arrive à récupérer le fichier entier, à le recopier dans un document.txt mais je ne vois pas du tout comment faire pour dire à mon programme de ne récupérer que la chaine de caracteres située avant le premier ";" et la chaine de caractere située avant le dernier ";".
Voilà mon programme pour le moment; il compile correctement mais lors de l'éxécution, rien ne s'affiche dans la console:
J'espere avoir été suffisement clair, sinon poser moi des questions sur ce dont vous ne comprenez pas.
Merci d'avance de votre aide
Mon problème est le suivant:
J'ai un fichier (que j'appellerai "fichier.csv") qui se compose de la manière suivante:
NOM MAGAZINE1;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
NOM MAGAZINE2;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
NOM MAGAZINE3;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
NOM MAGAZINE4;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
...
NOM MAGAZINEX;NOMBRES DE PAGES;CODE;TYPE;DATE;TARIFS;
Ce que je dois faire, c'est ouvrir ce fichier et ne récupérer que les colonnes NOM MAGAZINE et TARIFS.
J'arrive à récupérer le fichier entier, à le recopier dans un document.txt mais je ne vois pas du tout comment faire pour dire à mon programme de ne récupérer que la chaine de caracteres située avant le premier ";" et la chaine de caractere située avant le dernier ";".
Voilà mon programme pour le moment; il compile correctement mais lors de l'éxécution, rien ne s'affiche dans la console:
// Tri Titres-Tarifs.cpp : définit le point d'entrée pour l'application console. // //////////////////////////////////////////////////////////////////////////////////////////////// /// Travail demandé: /// /// /// /// Ecrire un programme en C/C++ qui permettrait de, tout dabord trier les titres des /// /// magazines par ordre alphabetique, avec leur nombre et le total de leurs tarifs. /// /// Il faudra ensuite faire la moyenne de ces tarifs pour chaque magazines. /// /// /// //////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////// /// Bibliothèques /// ///////////////////// #include <stdio.h> #include <stdlib.h> #include <stdafx.h> #include <string.h> #include <iostream> using namespace std; #define TAILLE_MAX 100 /////////////////////////// /// Programme Principal /// /////////////////////////// int _tmain(int argc, _TCHAR* argv[]) { FILE *fichier1 = 0; // Initialisation à 0 d'un pointeur sur fichier. FILE *fichier2 = 0; int CaractereActuel = 0; // Initialisation d'une variable CaractereActuel à 0. // Ouverture du fichier 20090727-TABLES_EDI.csv en lecture. fichier1 = fopen("C:\\Documents and Settings\\bastien\\Bureau\\Offres - Tables EDI Excel\\20090727-TABLES_EDI.csv", "r"); /* Test du fichier1 */ if(fichier1 != NULL) { do { CaractereActuel = fgetc(fichier1); // Récupère un caractère à la fois do { // Ouverture d'un fichier pour écrire le caractère lu. fichier2 = fopen("C:\\Documents and Settings\\bastien\\Bureau\\fichier_test_ecriture.txt", "w"); /* Test fichier2 */ if(fichier2 != NULL) { if(CaractereActuel == ';') // Si le caratère qui ets lu est un ";", alors on écrit un saut de ligne dans le fichier2 fputs("\n", fichier2); else // Sinon, on écrit chaque caractère qui est lu { fputc(CaractereActuel, fichier2); } fclose(fichier2); } else cout << "Erreur lors de l'ouverture du fichier fichier_test_ecriture.txt" << endl; } while(CaractereActuel != ';'); // Je boucle tant que le caractère qui est lu n'est pas ";" } while(CaractereActuel != EOF); fclose(fichier1); } /* Fin du test du fichier */ else cout << "Erreur lors de l'ouverture du fichier 20090727-TABLES_EDI.csv" << endl; return 0; }
J'espere avoir été suffisement clair, sinon poser moi des questions sur ce dont vous ne comprenez pas.
Merci d'avance de votre aide
A voir également:
- Petit souci de séparateur en C++
- Petit 2 ✓ - Forum Bureautique
- Comment imprimer une photo en petit - Forum Photo numérique
- Trier du plus petit au plus grand excel - Guide
- Petit 3 ✓ - Forum Word
- Comment écrire mètre carré avec un m+2 expos? ✓ - Forum Windows
2 réponses
Tu demandes du C++, je te propose une fonction permettant de réaliser à peu près ce que tu désires. A partir d'une ligne, elle construit une liste. A toi de l'adapter.
#include <iostream> #include <list> #include <string> using namespace std; void decoupe(string& chaine, string& delimiteur, list<string>& liste) { string::size_type pos, pos_ex = 0; while ( (pos = chaine.find(delimiteur, pos_ex)) != string::npos) { liste.push_back(chaine.substr(pos_ex, pos-pos_ex)); pos_ex = pos + 1; } liste.push_back(chaine.substr(pos_ex)); } int main() { string chn("abc;def;ghi"); string delim(";"); list<string> lst; decoupe(chn, delim, lst); list<string>::iterator iter = lst.begin(); while (iter != lst.end()) cout << *iter++ << endl; return 0; }Bonne continuation.