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 :

Manipulation de fichiers textes - fonction


Sujet :

C

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut Manipulation de fichiers textes - fonction
    Bonjour.

    Je sais qu'en C, les paramètres sont passés par valeur et les valeurs des conteneurs en changent pas. Ainsi, long f(int a,int b){return a+b;} est une fonction qui va renvoyer la valeur de a+b mais ne changera pas les valeurs de a ni de b, quoi qu'il se trouve comme traitement sur a et b dans le bloc de la fonction.

    Dans le cas de manipulation sur deux fichiers, en passant des pointeurs de flux, on réalise les opérations sur le fichier à la suite du pointeur de flux. Mais les valeurs des pointeurs ne seront pas modifiés. Alors que faut-il faire pour réaliser une fonction qui restitue le pointeur à l'endroit où le traitement est achevé ? Faut-il renvoyer un FILE * qui désigne le pointeur de fichier après traitement et d'écraser l'ancienne valeur (un peu à la manière d'un fgets qui écrase le pointeur de chaîne dans lequel elle écrit) et réinitialiser les pointeurs, ou est-ce une mauvaise idée?

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par kromartien
    Dans le cas de manipulation sur deux fichiers, en passant des pointeurs de flux, on réalise les opérations sur le fichier à la suite du pointeur de flux.
    Le 'pointeur de flux' pointe sur un objet interne servant à manipuler un flux donné (une structure quelconque, opaque et non documentée). C'est une adresse mémoire (comme en retourne malloc(), par exemple).

    Ceci n'a strictement rien à voir avec le 'pointeur' ou 'index' ou 'curseur' de lecture ou d'écriture (manipulé par fseek(), par exemple).

    Il n'y a donc aucun risque à passer un ou des FILE* valides à une fonction.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    Citation Envoyé par kromartien
    Bonjour.

    Je sais qu'en C, les paramètres sont passés par valeur et les valeurs des conteneurs en changent pas. Ainsi, long f(int a,int b){return a+b;} est une fonction qui va renvoyer la valeur de a+b mais ne changera pas les valeurs de a ni de b, quoi qu'il se trouve comme traitement sur a et b dans le bloc de la fonction.
    jusque la, on est d'accord ..

    Dans le cas de manipulation sur deux fichiers, en passant des pointeurs de flux, on réalise les opérations sur le fichier à la suite du pointeur de flux. Mais les valeurs des pointeurs ne seront pas modifiés. Alors que faut-il faire pour réaliser une fonction qui restitue le pointeur à l'endroit où le traitement est achevé ?
    euh? confus, trés confus !

    FILE est un type opaque(voir le site d'emmanuel, section sur les TAD), FILE * est un pointeur sur ce type.

    les fonctions fopen et fclose permettent de creer//détruire le flux.
    les fonctions de lecture/écriture fread,fscanf,fwrite,fprintf (etc ...) déplacent l'indicateur de position du flux.
    cette indicateur représente la position courante dans le fichier.
    exemple:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    size_t my_read(FILE *in,const char *buff,size_t len)
    {
    return fread(buff,len,1,in);
    }
     
    int main(void)
    {
    FILE *a = fopen("test.txt","r");
    char buff[1024];
    if(a)
    {
    my_read(a,buff,sizeof(buff));
    }
    return EXIT_SUCCESS;
    }
    deplaceras le pointeur de position dans le flux appelé a, et un second appel a la fonction my_read sur ce flux, continueras la lecture la ou elle s'etait arreté

    Faut-il renvoyer un FILE * qui désigne le pointeur de fichier après traitement et d'écraser l'ancienne valeur (un peu à la manière d'un fgets qui écrase le pointeur de chaîne dans lequel elle écrit) et réinitialiser les pointeurs, ou est-ce une mauvaise idée?
    quels traitements?
    je n'ai pas compris l'exemple avec fgets.

    Citation Envoyé par man
    fgets() return s on success, and NULL on error or when end
    of file occurs while no characters have been read.
    ---
    edit: grillé par emmanuel ... j'ai ete un peu lent a répondre
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipulation des fichiers textes
    Par tickerdu22 dans le forum C#
    Réponses: 1
    Dernier message: 17/02/2008, 19h45
  2. Manipulation de fichiers textes
    Par chlours dans le forum C++
    Réponses: 3
    Dernier message: 22/01/2008, 13h33
  3. Réponses: 2
    Dernier message: 07/10/2007, 19h52
  4. [Débutant] Manipulation de fichier texte ?
    Par Badaboumpanpan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/06/2007, 10h42
  5. manipuler un fichier texte
    Par bassidi meryeme dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2005, 00h23

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