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 :

nom de fichier variable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut nom de fichier variable
    Bonjour,

    après quelques recherches, je ne trouve pas de réponse. J'imagine pourtant que c'est un problème courant. Je pourrais toujours bricoler un truc mais j'ai besoin d'un code très clean, c'est pour ma recherche et c'est assez pressé et important. Je pose donc la question.

    J'ai besoin d'écrire des données dans des fichiers dont le nom dépend d'une variable. Typiquement, j'aimerais pouvoir créer, ouvrir et écrire dans un fichier de nom:
    "nom[k].dat"

    Jusqu'à maintenant, j'écrivais à la main pour chaque fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char namefile[100]="nom1.dat";
    FILE * nom1;
    nom1=fopen(namefile, "w");
    ...
    if(k==1) fprintf(nom1, "%lf\n",variable);
    ...
    fclose(nom1);
    A présent, j'ai une vingtaine de fichiers différents et j'aimerais pouvoir automatiser ce que j'ai écrit ci-dessus. Je sais le faire avec Mathematica et j'imagine que l'idée est la même, il faut convertir un nombre en chaîne de caractères.

    J'espère que quelqu'un pourra m'aider. Merci d'avance.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    POur ce faire, il faut crée une chaine de caractère en utilisant sprintf().
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char monNomDeFichier[20] = { 0 };
    int i = 0;
     
    for ( i = 0 ; i < 20 ; i++ )
    {
        sprintf(monNomDeFichier,"nom%d.dat",i);
        printf("%s\n",monNomDeFichier);
    }
    Voilà
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Petite erreur de frappe :
    Citation Envoyé par LittleWhite Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ....
        sprintf(monNomDeFichier,"nom%d.dat", i);

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Ah merci beaucoup. Cela m'aide bien. J'ai encore une petite question :
    J'ai plusieurs boucles, sur i et sur k disons. Selon le résultat obtenu à l'itération (i,k), l'on va écrire dans tel ou tel fichier. Je dois donc écrire plusieurs fois sur un même fichier, à différentes itérations. J'arrive bien maintenant à ouvrir le fichier, écrire puis refermer à l'intérieur des boucles.

    Je me demandais s'il n'était pas possible d'ouvrir les fichiers avant les boucles et de les refermer après. Je suppose que cela mobilise moins de ressources comme cela, plutôt que d'ouvrir et fermer les fichiers sans arrêt.

    Mais je ne parviens pas à le faire. Mes connaissances sont limitées en C et je pense que je comprends mal comment fonctionnent fopen et fclose. Voici ce que j'ai essayé. J'ai voulu faire un tableau pour ouvrir les fichiers.

    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
     
        int k=0;
        int N=11;
        char namefile[20] = { 0 };
        int file[N]; 
    //le pointeur de FILE doit bien être un entier, car fopen est de type int, non ?
     
    for ( k = 1 ; k < N ; k++ )
    {
        sprintf(namefile,"phase%d.dat",k);
        FILE * file[k];
        file[k]=fopen(namefile, "w");
    }
     
    for ( k = 1 ; k < N ; k++ )
    {
        fprintf(file[k], "%i\n",k);
    }
     
    for ( k = 1 ; k < N ; k++ )
    {
        fclose(file[k]);
    }
    Ce code ne fonctionne pas. Pouvez-vous encore m'aider sur ce point ? Merci d'avance.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    J'ai pas très bien compris votre but.
    Dans votre code, il y a plusieurs erreurs:

    Si c'est pour acceuillire des fichiers, c'est de type FILE*.
    Donc un tableau de fichier c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for ( k = 1 ; k < N ; k++ )
    {
        sprintf(namefile,"phase%d.dat",k);
        FILE * file[k];
        file[k]=fopen(namefile, "w");
    }
    Là, en fait, la variable file est locale à la boucle est n'existe que dans la boucle. Donc, ce n'est même pas celle que vous aviez déclaré avant que vous utiliser.
    De plus, vous ne pouvez donc pas fermer vos fichiers (ni les utilisez) étant donné que de est local à la boucle (et donc, disparait en sortant de la boucle)

    Tout ce qui suit, je pense, plante plus ou moins, vu que ce n'est pas le même file.

    Ce que je pense que vous devez faire, c'est de faire une boucle, et dedans cela se passe comme suit:
    Boucle de 0 à 20
    - Ouverture du fichier
    - Action sur le fichier
    - Fermeture du ficheir
    Fin boucle
    (Note: Merci Diogène pour la correction )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Bonjour,
    merci. Votre réponse m'a permis de comprendre que FILE * nom est une déclaration. Dans mon tuto, cela n'était pas spécifié. J'ai donc confondu avec une fonction complètement corrélée à fopen et c'est pour cela que je le mettais dans la boucle. Tenant compte de cela, tout est clair.

    Ce que je voulais faire, c'était ouvrir les fichiers dans une boucle. Ecrire dessus dans une autre boucle. Et finir par les fermer dans une troisième boucle. Sachant que FILE * nom est une déclaration à faire à l'extérieur des boucles, maintenant cela fonctionne.

    Merci encore.

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

Discussions similaires

  1. [WD15] Chaines de caractères / Nom de FICHIER variable
    Par EriCstoFF dans le forum WinDev
    Réponses: 17
    Dernier message: 29/03/2011, 13h26
  2. [VBA]-Enregistrement d'un nom de fichier variable
    Par marc56 dans le forum Excel
    Réponses: 2
    Dernier message: 10/08/2007, 08h54
  3. Ouvrir fichier ( nom du fichier variable )
    Par kilian dans le forum C++
    Réponses: 2
    Dernier message: 24/05/2006, 11h21
  4. Nom de fichier variable!
    Par melphit dans le forum C++
    Réponses: 1
    Dernier message: 16/04/2006, 10h37
  5. Nom de fichier variable.
    Par ::Fistons dans le forum Langage
    Réponses: 4
    Dernier message: 05/04/2006, 11h32

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