Comment tester le dernier caractère d'un fichier (suite de hier)

Comment tester le dernier caractère d'un fichier (suite de hier) - C++ - Programmation

Marsh Posté le 17-02-2003 à 21:30:52    

Bon, me revla!
encore merci à Taz++ pour ses conseils et exemples.
Now g fai ma sauce et j'arrive à sauter els blancs d'une autre façon Taz en mettan %7s[^\n\t\b]
 
Sinon vu k'hier je lisais des blocs de 7 caractrèes séparés par un virgule
et ke je mettais les dans une chaine  
COMMENT faire pour tester si le dernier caractère est une vorgule
Car si c'est une virgule le test doit être faux or ca n'est pas le cas.

Reply

Marsh Posté le 17-02-2003 à 21:30:52   

Reply

Marsh Posté le 17-02-2003 à 21:32:49    

Spydurmen a écrit :

Bon, me revla!
encore merci à Taz++ pour ses conseils et exemples.
Now g fai ma sauce et j'arrive à sauter els blancs d'une autre façon Taz en mettan %7s[^\n\t\b]


:non:
c'est ++Taz, et estime toi heureux, ça pourrait être *Taz[] !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-02-2003 à 21:34:02    

ok alors ++Taz ;)
 
Bon etpour mon probleme
y a t il un moyen de ne pas tout reparcourir

Reply

Marsh Posté le 17-02-2003 à 21:39:29    

si tu stockes la virgule alors que tu n'en n'a pas besoin, c'est peut etre un problème. tout le problème étant la synthaxe exact de tes données: ou sont les espaces, etc
 
size_t strlen(const char *)
renvoie le nombre de caractères d'une chaine de ccaractere terminée par un 0 (non compté) (strlen("abc" ) == 3)
 
détant donnée que les indices vont de 0 à strlen()-1...
 

Code :
  1. if(chaine[strlen(chaine)-1]== ',')
  2. {
  3.   // faire semblant de travailler
  4. }


 
si tu dois te servir plusieurs fois du resultat de strlen() sur la meme chaine, stocke dans une variable la taille. si tu veux te débarasser de ta vigule finale tu fais  
 

Code :
  1. size_t chaine_len=strlen(chaine);
  2. if(chaine[chaine_len-1]== ',')
  3. {
  4.   chaine[chaine_len-1]='\0';
  5. }


Message édité par Taz le 17-02-2003 à 22:09:34
Reply

Marsh Posté le 17-02-2003 à 21:53:28    

le truc c ke je fai des fscanf et pa des getc
 
Donc étant doné ke ma lecture se fait comme ça :
"%7[^,\b\t\r\f\v\n ],"
La virgule est ignorée
 
Sui-je obligé de reparcourir le fichier du début?


Message édité par spydurmen le 17-02-2003 à 21:53:59
Reply

Marsh Posté le 17-02-2003 à 22:03:35    

non si ton fichier le permet (sans doute) tu peux le parcourir aléatoirement
 
le problème c'est de savoir si y a des espaces ou pas. par ce que les [] représente des chaines non-vides, donc faire un [^\t\n][\t\n]ne va pas fonctionner comme un regex * (0 à n)
 
la solution ç coup de fgetc que je t'ai donné est certes simple, mais elle fonctionne parfaitement. ne te soucie des performances, fait marcher ton programme. il n'est pas interdit de mélanger les fgetc et fscanf

Reply

Marsh Posté le 17-02-2003 à 22:05:54    

merci

Reply

Marsh Posté le 17-02-2003 à 22:56:27    

Code :
  1. int virguleFin(FILE *fp)
  2.   {
  3.    int c;
  4.  
  5.    if( fseek(fp, -1, SEEK_END) == 0){
  6.     if( (c=fgetc(fp)) == ',' )puts("Virgule détectée" );
  7.     }
  8.       return 0;
  9.   }


 
VOilà la solution ke j'ai trouvé


Message édité par spydurmen le 17-02-2003 à 22:57:31
Reply

Marsh Posté le 17-02-2003 à 23:03:21    

effectivement ça dira bien si le dernier caractère de ton fichier du fichier est un ','
 
enfin ta fonction est bancale, c ne sert à rien et ta fonction de renverra que 0 ou n(importe quoi... d'ailleurs ton compilo devrait te balancer des warning plein la tete


Message édité par Taz le 17-02-2003 à 23:04:38
Reply

Marsh Posté le 17-02-2003 à 23:39:18    

Code :
  1. short virguleFin(FILE *fp)
  2.   {
  3.    int c;
  4.  
  5.    if( fseek(fp, -1, SEEK_END) == 0){
  6.     c=fgetc(fp);
  7.     if( c == ',' ) return 1;
  8.     }
  9.       return 0;
  10. }


 
version finale : g remplacé l'affichage par un return 1 si on trouv une virgule
PLus de warning

Reply

Marsh Posté le 17-02-2003 à 23:39:18   

Reply

Marsh Posté le 18-02-2003 à 05:42:16    

ben y a toujours un cas ou ça renvoie rien

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed