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 :

Supprimer un caractère lors de la lecture d'un .txt


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Supprimer un caractère lors de la lecture d'un .txt
    Bonjour,

    J'ai un problème avec le code ci-dessous. *
    Je souhaite lire un fichier, et le réécrire en le modifiant un peu (en vue d'un scanf) dans un autre fichier. Toutes mes modifications fonctionnent. Cependant, j'aimerai aussi séparer mon "rls/H=-x" en "rls/H=" et "-x" (cf: fichier lu). Mais je ne peux pas faire un if comme pour les autres, car le caractère 'H' est présent à d'autres endroits de mon fichier texte.
    Savez vous comment j'pourrais m'y prendre? Parce que là je suis bien bloqué.

    J'ai essayé de modifier en changeant les caractères '/' et 'H' en 'H' et ' ' (compteur, et dès que j'atteins le numéro de caractère de '/', j'opère la modif), ça marche, mais comme la suite de mon fichier change, les numéros de caractère sont modifiés.


    Fichier lu:

    ! Vloc_Rloc

    $steps 1503 time= 0.1878750D-01

    !-----------------------------------------------------------------------
    $icdan SPSPx 2
    cdbdy numbr cdtac numbr CDVER behav anbdy numbr antac numbr sttus
    RBDY3 9 SPHER 1 sico5 RBDY3 28 SPHER 1 slide 28
    rls/H 0.2168742D+00 rlt/H 0.1461062D+01 rln/H 0.1477070D+02
    vls = 0.6763135D-01 vlt = 0.4556264D+00 vln = 0.5219771D+01
    gTT = 0.2634442D-04
    s(1)= 0.3946493D+00 s(2)=-0.8960255D+00 s(3)= 0.2034461D+00
    t(1)= 0.1030792D+00 t(2)= 0.2631953D+00 t(3)= 0.9592200D+00
    n(1)= 0.9130316D+00 n(2)= 0.3575844D+00 n(3)=-0.1962314D+00
    coo1=-0.1611689D-01 coo2=-0.1002224D-01 coo3= 0.1773654D-01

    $icdan SPSPx 1
    cdbdy numbr cdtac numbr CDVER behav anbdy numbr antac numbr sttus
    RBDY3 13 SPHER 1 sico5 RBDY3 61 SPHER 1 slide 61
    rls/H-0.7878895D+00 rlt/H-0.2505081D+01 rln/H 0.2626062D+02
    vls = 0.1985293D+01 vlt = 0.6312207D+01 vln = 0.9280158D+01
    gTT = 0.4225549D-04
    s(1)=-0.7080113D+00 s(2)=-0.5811294D+00 s(3)=-0.4012588D+00
    t(1)=-0.3202700D+00 t(2)= 0.7706269D+00 t(3)=-0.5509639D+00
    n(1)=-0.6294022D+00 n(2)= 0.2615775D+00 n(3)= 0.7317309D+00
    coo1= 0.6835382D-02 coo2=-0.2954009D-01 coo3= 0.1610224D-01




    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #define SORTIE "essai.dat"
    #include <dirent.h>
     
     
    int main(void)
    {
     
      FILE *traitement=fopen(SORTIE,"w");  
      FILE *vlocrloc=fopen("Vloc_Rloc.OUT.3"/*fname*/,"r");
      int c;
     
      while ((c = fgetc(vlocrloc)) != EOF)
    	{
    	  if (c == '!')
    	    {
    	      c = ' ';
    	    }
    	  else
    	    if (c == '=')
    	      {
    		c = ' ';
    	      }
    	    else      
    	      if (c == 'D')
    		{
    		  c = 'e';
    		}
    	  putchar(c);
    	  putc(c,traitement);
    	}
      fclose(vlocrloc);
      fclose(traitement);
      return(EXIT_SUCCESS);
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Pour nous aider à mieux comprendre, peux tu nous donner aussi un extrait du fichier à traiter ?

    Sinon, pour ton problème, tu peux travailler avec une petite mémoire (pas testé) :
    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
    43
    44
    45
    46
    #include <stdio.h>
    #include <stdlib.h>
    #define SORTIE "essai.dat"
    #include <dirent.h>
     
     
    int main(void)
    {
     
      FILE *traitement=fopen(SORTIE,"w");  
      FILE *vlocrloc=fopen("Vloc_Rloc.OUT.3"/*fname*/,"r");
      int c_red; /* caractère lu */
      int c_wrt; /* caractère a écrire*/
      int last = 0; /* précédent caractère lu */
     
      while ((c_red = fgetc(vlocrloc)) != EOF)
    	{
              c_wrt = c_red;
    	  if (c_red == '!')
    	    {
    	      c_wrt = ' ';
    	    }
    	  else
    	    if (c_red == '=')
    	      {
                    if(last == 'H') {
                      /* insertion d'un espace si on a "H=" */  
                      putchar(' ');
     	          putc(' ',traitement);   
                    } else {
      		  c_wrt = ' ';
                    }
    	      }
    	    else      
    	      if (c_red == 'D')
    		{
    		  c_wrt = 'e';
    		}
    	  putchar(c_wrt );
    	  putc(c_wrt ,traitement);
              last = c_red;
    	}
      fclose(vlocrloc);
      fclose(traitement);
      return(EXIT_SUCCESS);
    }
    Dernière modification par Invité(e) ; 26/04/2010 à 17h30. Motif: étourderie

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    OK, c'est bon, ça fonctionne, si on remplace c_red par c_wrt dans le putchar et le putc.

    Merci!

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par sayanmehdi Voir le message
    OK, c'est bon, ça fonctionne, si on remplace c_red par c_wrt dans le putchar et le putc.
    Oui, effectivement, c'est une erreur de ma part.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 28/04/2015, 10h57
  2. [Batch] Problème avec caractère ! lors d'une lecture de fichier pour extraction
    Par damsmut dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 20/11/2012, 16h21
  3. Ignorer des caractères lors d'une lecture fichier
    Par Inaky dans le forum Langage
    Réponses: 9
    Dernier message: 06/11/2011, 15h25
  4. [PHP 5.3] Perte de caractères lors d'une lecture de fichier
    Par Vince57 dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2010, 19h03
  5. Réponses: 4
    Dernier message: 25/05/2010, 17h59

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