IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

lire dans un fichier texte jusqu'à un séparateur


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut lire dans un fichier texte jusqu'à un séparateur
    Bonjour à tous !
    dans le cadre d'un projet, j'aurais besoin de lire dans un fichier texte, cepandant ma premiere lecture concerne un chiffre et la seconde un nombre. Et lors de l'exécution du programme, on n'est pas censé avoir cette information, j'aimerais donc savoir de quelle maniere peut on lire dans un fichier jusqu'à rencontrer un espace, et alors mémoriser la chaîne rencontrée jusqu'à l'espace, j'ai chercher sur le net, mais je n'ai jamais reussi a trouver une solution qui correspondait a mon probleme. Pouvez vous m'aider ? merci beaucoup


    je vous joins le morceau de code que j'ai commencé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /**
     * @file labyrinthe.cpp
     * @author x
     * @version 1-23/12/05
     * @brief 
     */
     
    #include <stdlib.h>
    #include <iostream>
    #include <fstream>
    using namespace std;
     
    #include "pile.h"
     
    int main() {
    	ifstream fichier;
    	fichier.open("matrice.txt", ios::in);
    	if (fichier.fail()) 
    		cout << "Erreur à l'ouverture du fichier" << endl;
    	else
    		cout << "Le chargement du fchier a bien été effectué" << endl;
        	Pile pile;
    	creer(pile, 0, 1);
     
    	fichier.close();
    }

  2. #2
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Il n'y a rien dans la FAQ ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int chiffre, nombre;
    while( fichier >> chiffre >> nombre )
       cout << "Le chiffre et le nombre sont : " << chiffre << ", " << nombre << endl;

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    je ne trouve pas de reponses qui correspondent a ce cas précis dans la F.A.Q

    pourrais-tu m'expliquer ton code s'il te plait ? je debute, et j'aimerais comprendre de maniere à le réutiliser intelligement (ca m'evitera de reposter pour quelque chose de si peu important au point de vue d'autres personnes xD)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Points : 145
    Points
    145
    Par défaut
    regardes l exemple du getline dans cette page : et remplace par un espace le ';' de l'exemple

    http://c.developpez.com/faq/cpp/?page=strings

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Points : 62
    Points
    62
    Par défaut fscanf peut etre?
    s'il faut lire jusqu'à un espace tu peux toujours t'amuser à lire caractere apres caractere en comparant à chaque fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(!feof(fichier))
    {getchar()//lit le prototype de la fonction; m'en rappele plus ...
    if(char_lu==32)//32= code ASCII de espace
      {//continue le code}}
    cependant tu peux utiliser , si ce sont les tabulations ou les retours chariots qui servent de separateurs
    tout ce que tu lis, tu suppose dans un premier temps que ce sont des chaines de caracteres ensuite tu teste si ce sont des entiers, reels...

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    merci pour votre aide, j'ai opté pour le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	unsigned int n=10;
    	istream& get (char* s, streamsize n, char delim=' ');
     
    	cout << "la largeur du tableau sera "<< s  << endl;
    Cepandant, à l'affichage du oremier nombre lu (celui placé avant l'espace), j'ai voulu faire de la manière ci-dessus mais visiblement on ne peut pas passer s de cette manière pour l'afficher, le compilateur renvoit 2 erreurs :

    error: `s' undeclared (first use this function)
    error: (Each undeclared identifier is reported only once for each function it appears in.)

    est-ce que quelqu'un pourrait m'expliquer pourquoi ? merci beaucoup de votre aide qui m'est précieuse!

  7. #7
    Membre du Club
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    n'oublie pas de marquer resolu sur la discussion si ton probleme est resolu...ça eviterait des lectures inutiles

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Citation Envoyé par Phoenix_Blue
    s'il faut lire jusqu'à un espace tu peux toujours t'amuser à lire caractere apres caractere en comparant à chaque fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(!feof(fichier))
    {getchar()//lit le prototype de la fonction; m'en rappele plus ...
    if(char_lu==32)//32= code ASCII de espace
      {//continue le code}}

    Les lectures en C & C++ ne se font pas sur eof!!! FAQ ?
    Quant à la valeur de l'espace, c'est ' ' tout simplement. Nul besoin de rendre un code incompréhensible pour ceux qui ne connaissent pas par coeur leur table ASCII, et non portable suivant les machines ciblées.

    Et quant à la FAQ, il y a tout ce qui faut dedans:
    - des liens sur de la doc de référence
    - des cas d'utilisation de std::getline

    Cette dernière fonction permettant de tout lire jusqu'au prochain caractère spécifié, ' ' par exemple. alskaar t'avais déjà donné cette réponse. Pourquoi l'ignores-tu ?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    je ne l'ignore pas, c'est simplement que je n'ai pas reussi a m'en servir, et en essayant la fonction que je vous ai montré, ca a fonctionner de suite, a part pour réécrire ce que j'avais lu, là ca ne fonctionne pas :s

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Définit "n'a pas marché".

  11. #11
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Et donne peut être un exemple de deux ou trois lignes du fichier que tu tentes de lire.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Le fichier que je tente de lire commence par :

    9 21
    #####################

    je voudrais lire et afficher les deux nombres en premieres lignes puis les passer à une matrice, pour qu'elle s'adapte a cette taille.

    je vous decris ce que j'ai codé:
    j'ai ouvert le fichier texte, j'ai lu les valeurs, avec la fonction suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Matrice lireValeurs(istream& is){
    	Matrice matrice;
    	is >> matrice.ligne >> matrice.colonne;
    	return(matrice);
    }
    et ensuite je veux les afficher pour verifier que c'est exact, je fais donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << m.ligne << m.colonne << endl;
    cependant a l'écran ca m'affiche deux lignes avec les valeurs, comme ceci (premier hic):

    9 21
    9 21

    et ensuite je n'arrive pas à trouver la facon de faire pour que ma matrice, apres lecture de ces valeurs, puissent prendre ces valeurs puis les defiir comme etant sa longueur et sa largeur

Discussions similaires

  1. Choisir la ligne a lire dans un fichier texte
    Par Lucas42 dans le forum C
    Réponses: 2
    Dernier message: 06/11/2007, 01h50
  2. lire dans un fichier text
    Par khayate dans le forum VB.NET
    Réponses: 6
    Dernier message: 18/06/2007, 18h22
  3. Réponses: 13
    Dernier message: 09/11/2006, 23h37
  4. [VB.NET]comment écrire/lire dans un fichier text
    Par zouhib dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/05/2006, 17h11
  5. Ecrire et lire dans un fichier texte
    Par podz dans le forum C
    Réponses: 3
    Dernier message: 25/10/2005, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo