Petit souci de séparateur en C++
Résolu
KiraX10A
Messages postés
260
Statut
Membre
-
KiraX10A Messages postés 260 Statut Membre -
KiraX10A Messages postés 260 Statut Membre -
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 écrire mètre carré avec un m+2 expos? ✓ - Forum Windows
- Trier du plus petit au plus grand excel - Guide
- Comment imprimer une photo en petit - Forum Photo numérique
- Petit point vert snap ✓ - Forum Snapchat
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.