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 :

incrémenter une valeur numérique dans le nom d'un fichier


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 53
    Points
    53
    Par défaut incrémenter une valeur numérique dans le nom d'un fichier
    Bonjour,
    j'avoue que le C++ je n'y connais rien (contrairement au C.

    Je dis ça parce que mon problème est je pense simple.

    En fait j'ai une fonction de sauvegarde. Je voudrais qu'a chaque appel de la fonction, le nom de la sauvegarde diffère.

    Pour l'instant c'est du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img.save("nom du fichier de sauvegarde");
    Et moi je voudrais un truc type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char chaine;
    if num_fichier<=nb_max_fichier
    {
       num_fichier++
       chaine = strcat('C:\\blabla\image_numero_',num_fichier,'.bmp');
      img.save(chaine);
    }
    avec num_fichier et nb_max_fichier déclaré en public dans un .h quelconque.

    Quelqu'un pourrait il m'aider à coder ceci s'il vous plait ?

    Merci.

  2. #2
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char chaine;
    if num_fichier<=nb_max_fichier
    {
       num_fichier++
       chaine = strcat('C:\\blabla\image_numero_',num_fichier,'.bmp');
      img.save(chaine);
    }
    en C++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      AnsiString asChaine;
     
        if(num_fichier <= nb_max_fichier)
        {
                  num_fichier++;
                  asChaine = "C:\\blabla\image_numero_" + IntToStr(num_fichier)+ ".bmp";
           img.save(asChaine);
         }
    Tous Probleme a sa solution. Sinon il a le bouton magique : . Et surtous :
    Et ne pas oublier :

  3. #3
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    il faut utiliser une fonction de formatage, après suivant le type de code, on peut utiliser les librairies telles que STL ou Boost ou bien les bonnes vieilles fonctions du type sprintf, ou encore les flux.

    Pour ma part, j'utilise encore les "les bonnes vieilles fonctions du type sprintf"
    int sprintf( char *buffer, const char *format [, argument] ... );

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char tab[_MAX_PATH];
    if (num_fichier<=nb_max_fichier)
    {
       num_fichier++;
      //On remplie tab avec le nom du fichier incrémenté
       sprintf(tab,"C:\\blabla\\image_numero_%03d.bmp",num_fichier);
    }
    % indique que l'on place un objet dans la chaine de caractère
    d indique que l'objet est un entier
    3 indique le nombre de caractère qu'occupe l'objet
    0 indique que l'on remplie les blancs par des zéros

    Mais il y a plein d'autres manières de le faire, plus C++ et plus sécurisée

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par Baxter67 Voir le message
    En C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      AnsiString asChaine;
     
        if(num_fichier <= nb_max_fichier)
        {
                  num_fichier++;
                  asChaine = "C:\\blabla\image_numero_" + IntToStr(num_fichier)+ ".bmp";
           img.save(asChaine);
         }
    Ce n'est pas du C++ standard.
    JeromeBcx donne une solution mais qui utilise une fonction issue du C.
    En C++, l'équivalent est les stringstreams. Ce sont les flux concernant les chaînes de caractères. Je te renvoie à la C++ pour en savoir plus.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par milach Voir le message
    Bonjour,
    j'avoue que le C++ je n'y connais rien (contrairement au C.

    Je dis ça parce que mon problème est je pense simple.

    En fait j'ai une fonction de sauvegarde. Je voudrais qu'a chaque appel de la fonction, le nom de la sauvegarde diffère.

    Pour l'instant c'est du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img.save("nom du fichier de sauvegarde");
    Et moi je voudrais un truc type :

    avec num_fichier et nb_max_fichier déclaré en public dans un .h quelconque.

    Quelqu'un pourrait il m'aider à coder ceci s'il vous plait ?

    Merci.
    Voila =)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    std::string nomFichier = "image_num";
    std::string numFichier;
    ++cpt;  //Compteur (variable globale)
    if (cpt <=nb_max_fichier)
    {
        std::ostringstream oss;
        oss << cpt;
        // récupérer une chaîne de caractères
        std::string numFichier = oss.str();
        nomFichier += numFichier;
        /* nomFichier.c_str() renvoi un char* sur le nom du fichier */
        img.save(nomFichier.c_str()); 
    }
    Pour le ostringstream c'est expliqué dans la FAQ ca te sert à convertir ton nombre en string .
    En C++ vaut mieux travailler avec des string ca te facilite la vie! donc si le prototype de ta fonction save est char*, essaye de le changer en std::string
    ==> nouveau prototype void save(std::string nomFichier); Si tu fait ce changement la dernière ligne du code que je t'ai donné devient : img.save(nomFichier);

  6. #6
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 53
    Points
    53
    Par défaut
    merci je teste ca tout de suite

  7. #7
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 125
    Points : 53
    Points
    53
    Par défaut
    Je ne sais pas si le prototype de la fonction save est char* ou pas .

    En fait, j'ai un code d'utilisation de caméra linéaire. Et la boite qui nous l'a fourni a développé des librairie de classes propriétaire( donc inchangeables).

    Dedans il y a l'objet Eimage8 par ex.
    Donc Et ensuite on peut appeler save :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Img.save("C:\\test\test.bmp");
    C'est tout ce que je sais. J'ai donc supposé qu'il fallait mettre dans save un char ou un char*.

    Voilà.

  8. #8
    En attente de confirmation mail
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Points : 348
    Points
    348
    Par défaut
    Citation Envoyé par milach Voir le message
    Je ne sais pas si le prototype de la fonction save est char* ou pas .

    En fait, j'ai un code d'utilisation de caméra linéaire. Et la boite qui nous l'a fourni a développé des librairie de classes propriétaire( donc inchangeables).

    Dedans il y a l'objet Eimage8 par ex.
    Donc Et ensuite on peut appeler save :

    Img.save("C:\\test\test.bmp");

    C'est tout ce que je sais. J'ai donc supposé qu'il fallait mettre dans save un char ou un char*.

    Voilà.
    Tu dois avoir un peu de documentation ou un .h qui te permet de savoir le type attendu par la fonctio save de Eimage8
    Il y a de grande chance (euh malchance) que ce soit un char* donc dans l'exemple de stranger, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img.save(nomFichier.c_str());
    est à conserver telle quelle (la fonction c_str() permet de renvoyer la chaine de caractère contenue dans l'objet std::string nomFichier

    euh au passage, un char*, pas un char. Le deuxième type char représente seulement un charactère, représenté sur 1octet, et non pas une chaine de caractère.

    L'utilisation des char* est vraiment pénible, c'est pour cela que stranger te proposait de virer toutes les utilisations à ce type...

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/06/2011, 10h40
  2. Réponses: 4
    Dernier message: 18/05/2010, 11h19
  3. récupérer une valeur numérique dans une chaine
    Par EFFLYINGJOKER dans le forum Développement
    Réponses: 2
    Dernier message: 30/03/2010, 16h26
  4. Ajouter une valeur numérique dans un champ null
    Par Christophe Charron dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/09/2009, 18h00
  5. [Débutant] Validation d'une valeur numérique dans une variable String
    Par anto84 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 11/07/2007, 10h26

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