Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1317 connectés 

  FORUM HardWare.fr
  Programmation
  C

  concatener chaine + entier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

concatener chaine + entier

n°1019442
myeve
Posté le 20-03-2005 à 23:15:12  profilanswer
 

Bonjour,  
voila j'ai plusieurs fichiers dans un repertoire du type:
nom_1, nom_2, nom_3, etc.., nom_n
 
Or j'aimerais dans une fonction tester quelle est la valeur max de 'n' dans le nom_n pour pouvoir creer des fichiers à la suite (nom_n+1)
 
j'ai :
int

Code :
  1. get_max (char *fichier)
  2. {
  3. int i = 0; // compteur local
  4. //FILE *fp = fopen (fichier, "r" );
  5. }


Et je vois pas comment faire la boucle selon 'i', et tester si 'nom_i' existe?
 
Merci d'avance pour vos reponses

mood
Publicité
Posté le 20-03-2005 à 23:15:12  profilanswer
 

n°1019445
KangOl
Profil : pointeur
Posté le 20-03-2005 à 23:17:18  profilanswer
 

avec sprintf ?


---------------
Nos estans firs di nosse pitite patreye...
n°1019450
myeve
Posté le 20-03-2005 à 23:23:59  profilanswer
 

ba je sais pas, avec ce qu'il est possible, en eviter des malloc

n°1019452
KangOl
Profil : pointeur
Posté le 20-03-2005 à 23:26:03  profilanswer
 

man sprintf


---------------
Nos estans firs di nosse pitite patreye...
n°1019457
myeve
Posté le 20-03-2005 à 23:29:44  profilanswer
 

oui je sais, mais désolé, je suis pas tres douée, et j'ai du mal pour faire la concatenation du nom du fichier avec le compteur 'i'.
 
Tu pourrais m'aiguiller ?

n°1019469
KangOl
Profil : pointeur
Posté le 20-03-2005 à 23:41:37  profilanswer
 

sprint(ficelle,"nom_%d",i);
 
c'est si dur que ca ?


---------------
Nos estans firs di nosse pitite patreye...
n°1019472
myeve
Posté le 20-03-2005 à 23:44:32  profilanswer
 

ah oui d'accord mais je peux faire un fopen derriere ca ?

n°1019476
KangOl
Profil : pointeur
Posté le 20-03-2005 à 23:47:47  profilanswer
 

qu'est ce qui t'en empeche ?


---------------
Nos estans firs di nosse pitite patreye...
n°1019477
myeve
Posté le 20-03-2005 à 23:48:58  profilanswer
 

en fait je recoit donc le nom du fichier en argument de la fonction, et doit tester si le fichier de nom "nom_i" existe (boucle jusqu'à valeur max de 'i')

n°1019484
myeve
Posté le 21-03-2005 à 00:00:57  profilanswer
 

merci beaucoup, voila le code (je sais ca vous parait tres facile mais bon)...
 

Code :
  1. int
  2. detect_max(char *fichier)
  3. {
  4. int i = 0; // compteur local
  5. char tmpfile[TAILLE];
  6. sprintf(tmpfile,"%s_%d",fichier,i);
  7. FILE *fp = fopen (tmpfile, "r" );
  8. while ( (fp = fopen (tmpfile, "r" )) != NULL )
  9. {
  10.  i++;
  11.  sprintf(tmpfile,"%s_%d",fichier,i);
  12. }
  13. printf("last fichier :%s",tmpfile);
  14. }


Message édité par myeve le 21-03-2005 à 00:01:14
mood
Publicité
Posté le 21-03-2005 à 00:00:57  profilanswer
 

n°1019485
KangOl
Profil : pointeur
Posté le 21-03-2005 à 00:03:12  profilanswer
 

euh faudrait peut etre penser a fermer tes fichiers non ?


---------------
Nos estans firs di nosse pitite patreye...
n°1019489
myeve
Posté le 21-03-2005 à 00:16:17  profilanswer
 

ah vi ok suis je bete, voila :
 

Code :
  1. char *
  2. get_max (char *fichier)
  3. {
  4. int i = 0; // compteur local
  5. char tmpfile[TAILLE];
  6. sprintf(tmpfile,"%s_%d",fichier,i);
  7. FILE *fp;
  8. while ( (fp = fopen (tmpfile, "r" )) != NULL )
  9. {
  10.  fclose(fp);
  11.  i++;
  12.  sprintf(tmpfile,"%s_%d",fichier,i);
  13. }
  14. return tmpfile;
  15. }


 
comme ca c mieux?


Message édité par myeve le 21-03-2005 à 00:17:09
n°1019490
KangOl
Profil : pointeur
Posté le 21-03-2005 à 00:18:02  profilanswer
 

non !
le retour de ta fonction est pas bonne :o


---------------
Nos estans firs di nosse pitite patreye...
n°1019491
myeve
Posté le 21-03-2005 à 00:24:31  profilanswer
 

ah oui mais j'aimerais bien retourner le nom du fichier, il faut quoi ? 'char' tout court ?

n°1019534
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2005 à 08:51:07  profilanswer
 

myeve a écrit :


Code :
  1. char *
  2. get_max (char *fichier)
  3. {
  4. int i = 0; // compteur local
  5. char tmpfile[TAILLE];
  6. sprintf(tmpfile,"%s_%d",fichier,i);
  7. FILE *fp;
  8. while ( (fp = fopen (tmpfile, "r" )) != NULL )
  9. {
  10.  fclose(fp);
  11.  i++;
  12.  sprintf(tmpfile,"%s_%d",fichier,i);
  13. }
  14. return tmpfile;
  15. }


 
comme ca c mieux?


 
Oui, mais il y a un bug potentiel. Bien qu'il soit techniquement possible de retourner l'adresse d'une variable locale, l'utilisation de celle-ci dans la fonction appelante invoque un copportement indéfini (normal, car cette adresse n'est plus valide). Il faut donc faire autrement. Il y a trois solutions connues.

  • Retourner l'adresse d'un variable statique (peu recommandé)
  • Retourner l'adresse d'un variable dynamique (pratique, mais attention à la libération du bloc)
  • Passer l'adresse d'une variable et permettre sa modfication. Si c'est un tableau, il est bon de passer aussi sa taille (en nombres d'éléments).


Mais dans ton cas, tu ne voulais pas juste retourner la valeur du compteur ?


Message édité par Emmanuel Delahaye le 21-03-2005 à 13:17:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1019624
myeve
Posté le 21-03-2005 à 11:51:30  profilanswer
 

si merci beaucoup, c'estce que j'ai fait ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  concatener chaine + entier

 

Sujets relatifs
Page web non affichée en entier sur certains ordinateurs[Résolu ] - VBS - Comment concaténer
Séparer une chaine de caractère [Résolu][algo] inverser les mots d'une chaine de charactere
substituer une chaine par une autreConversion ascii <-> entier
comment tester si un nombre est un entier[algo] toutes les permutations d'une chaine de charatere
MySQL requête ciblée sur une chaine de caractèreComment Charger une chaine (venant d'un formulaire) dans un tableau ?
Plus de sujets relatifs à : concatener chaine + entier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR