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 :

Operations sur fichier txt


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut Operations sur fichier txt
    Bonjour, cela fait quelques annees que je n'ai plus touche a du C et je suis quelques peu rouille.

    J'ai besoin de lire deux fichiers .txt
    les donnees a l'interieur sont presentees de la facon suivante :

    325
    648.2541
    321268
    0.144
    etc ...

    je dois stocker les valeurs de fichier1.txt a la suite dans tab1[65] et de meme pour le deuxieme fichier.

    Ensuite je dois faire des operations entre ces deux tableaux et ecrire le resultat dans un fichier de sortie.

    Exemple pour etre plus clair :

    J'ai 65 valeurs par fichier.
    remplis mes tab1[65] et tab2[65] puis je fais y = tab1[i] + tab2[i] et j'ecris le resultat dans un troisieme fichier, une ligne par resultat.

    Voici le code ( enfin si on peut dire ) que j'ai pondu pour le moment :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int test (int argc, char *argv[])
    {
     
        FILE* fSrc1;  //fichier1
        FILE* fSrc2;  //fichier2
        FILE* fDest;  //fichier Destination
     
        char Xn[65];
        int Nb1;    
        char Hn[65];
        int Nb2    
        double Yn;    
        int i = 0;
     
    // j'ai virer la partie ou j'ouvre les fichiers, test si ca c'est bien passe.
    //Ca marche etant donne que j'arrive a recopier les donnes d'un fichier dans 
    //celui de sortie
     
    /*************************************************
    * Start Process
    *************************************************/ 
     
             Nb1= fread(Xn, 1, 65, fSrcXn);
     
            for(i = 0; i < Nb1; i++)
            printf("%c", Xn[i]);
    	printf("\n Nombre lus :%d", Nb1);
     
    	fwrite(Xn, sizeof(Xn[0]), Nb1, fDest);
     
    /*************************************************
    * End Process
    *************************************************/ 
     
      //Close Files  enlever aussi pour alleger :D 
     
        return 0;
    }
    Pour le moment tout ce que le code fait c'est reecrire le fichier1 dans le fichier de sortie. je galere a faire des operations sur mes tableaux en faite O_o

    Donc voila, je crois que ce qu'on recupere d'un .txt est au format ASCII donc je suppose que si je veux inclure dans ma boucle un :

    y = x[i] + h[i] il faudra surement forcer le typage en double ( besoin d'un max de precision )

    Si quelqu'un a une petite idee, une piste, un conseil, une blague, je suis preneur

    Merci d'avance

  2. #2
    Membre éprouvé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Bonjour,

    A mon avis ce que tu devrais faire c'est :

    Ouvrir le fichier 1 en lecture et lire la première ligne
    Ouvrir le fichier 2 en lecture et lire la première ligne
    Ouvrir le fichier 3 en écriture
    Tant qu'il y a une ligne lue dans le fichier 1 et dans le fichier 2
    - Convertir les valeurs lue en nombre à virgule
    - Additionner les deux nombres
    - Ecrire le résultat dans le fichier 3
    - Lire la ligne suivante dans le fichier 1
    - Lire la ligne suivante dans le fichier 2
    Fin Tant
    Clore les 3 fichiers

    Pour la conversion, tu peux par exemple utiliser la fonction atof() du C (alphanuméric to float). Voici un exemple de son utilisation :
    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
    view plainprint?
     
        #include <stdio.h>  
        #include <stdlib.h>  
     
        int main()  
        {  
            char *x = "12";  
            char *y = "23";  
     
            float coordX = atof(x);  
            float coordY = atof(y);  
     
            printf ("X : %f - Y : %f\n", coordX, coordY);  
     
            return 0;  
        }

    Si ensuite tu veux reconvertir ton nombre a virgule en chaîne, tu peux passer par la fonction sprintf() : http://www.cplusplus.com/reference/c...stdio/sprintf/

    Bonne journée,

    Aldiemus

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Je te remercie de ton aide mais avant d'aller jusqu'a cette etape et comme je galere un peu , je veux y aller pas a pas.

    Pour le moment je me suis rajouter un petit process pour deja verifier que le tableau se rempli bien. j'ai donc mi dans mon premier fichier txt les valeurs suivantes :
    1
    2
    3
    4

    En sortie j'ai exactement la meme chose qui se recopie dans le fichier de destination MAIS, en rajoutant un petit bout de code debug que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            NbXnLus = fread(Xn, sizeof(Xn[0]), 65, fSrcXn);
     
            for(i = 0; i < NbXnLus; i++)
                printf("\n Xn[%d] = %c", i, Xn[i]);
     
    	printf("\n Nombre lus :%d", NbXnLus);
     
    	fwrite(Xn, sizeof(Xn[0]), NbXnLus, fDest);
    J'obtiens sur le terminal :

    Xn[0] = 1
    Xn[1] =
    Xn[2] =

    Xn[3] = 2
    Xn[4] =
    Xn[5] =

    Xn[6] = 3
    Xn[7] =
    Xn[8] =

    Xn[9] = 4
    Nombre lus :10

    Bon je vais jeter un coup d'oeil vu le bordel je dirais que fread renvoie la valeur en bytes ... enfin je suppose, si c'est le cas ca serait donc 8 octets pour les 4 chiffres (c'est 2 octets par asscii je crois) ... je comprends de toute facon pas le 10, peut etre le EOF ...

    De plus pourquoi il se rempli de cette facon ce gentil tableau .. et pas en Xn[0,1,2,3] O_o

    Il faut deja que j'arrive a regler ca avant de commencer des operations ^^


    EDIT :
    J'ai vraiment besoin de fonctionner par tableau car en faite j'implémente un filtre FIR et la sortie se calcul sur la somme des 65 x(n) d'entree * reponse impulsionnelle ( en faite un peu plus complique mais bon ce n'est pas le sujet ^^ )

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Ton tableau se remplit ainsi car ton fichier ne contient pas que des chiffres, il contient aussi des retours à la ligne. Si tu es sous windows, un retour à la ligne c'est deux char, ce qui explique que tu te retrouves avec un chiffre tous les 3 indices.

    4 chiffres, 3 retours à la ligne, 4 + 3*2 = 10 le compte est bon.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Je ne comprends pas quel est l'intérêt d'utiliser des tableaux pour ce genre d'exo. On peut très bien s'en passer.

    Par contre désormais il ne faut plus utiliser atof mais strtof (pour les float) ou strtod (pour les double) : http://man.developpez.com/man3/strtod.3.php

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 75
    Par défaut
    Je ne comprends pas bien comment tu peux faire cela sans tableau en faite
    car au final il n'y a pas seulement 65 entrees pour X mais 10 000 peut etre et donc a chaque fois il faut refaire les calculs sur les 65 dernieres entrees, il faut bien garder en memoire.

    On pourrait bien sure faire un petit process pour garder juste en memoire l'entree 1 lorsqu'on est a la 66 valeurs de X et la soustraire a la derniere valeur de sortie trouve et decalle le tout au fur et a mesure mais ca semblerait moins intuitif que faire le process dans des tableaux quand meme

    J'espere que je me suis bien exprime ca semble pas super clair a la re lecture

    Concernant la facon dont se rempli le tableau je te remercie pour ton explication je abandonner l'idee d'utiliser la fct fread... car il faut que je filtre ce que je recupere en virant les retour chariot T_T

    Vais me repencher sur ce probleme , merci pour vos explications.
    Si une personne a une idee interessante qu'elle n'hesite pas haha


Discussions similaires

  1. Operations sur fichier text
    Par niosOs dans le forum C#
    Réponses: 3
    Dernier message: 06/09/2007, 15h22
  2. [VBA-E] Opérations sur fichiers txt
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2007, 19h19
  3. [VBA-E] Encore opération sur fichier txt
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/03/2007, 12h43
  4. Remplacement carac X'0D' par X'0D25' sur fichier txt AIX
    Par Ange_de_la_nuit dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 23/12/2006, 09h12
  5. [VB6] debutant. Operation sur des txt ?
    Par Slumpy dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 22/05/2006, 12h51

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