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 :

noms des fichiers à ouvrir dans .txt


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut noms des fichiers à ouvrir dans .txt
    Bonjour,
    J'ai plusieurs fichiers externes à ouvrir, ceux ci peuvent varier (en nombres, et leur nom), pour eviter de recompiler à chaques fois mon programme avec les nouveaux noms des fichiers à ouvrir ou de demander à l'utilisateur d'entrer tout les noms des fichiers un par un j'ai crée un fichier (exemple "config.ini ou .txt n'importe") où seront stocké tout les noms des fichiers à ouvrir.
    exemple, contenue du config.ini:
    fichier1
    fichier_2
    fich3

    maintenant mon programme C doit aller lire ces noms et ouvrir chacun de ces fichiers pour par la suite recupérer des valeurs.

    J'arrive pas avec fgetc ou fgets à recupérer ces noms là car ils n'ont pas le même nombre de caractéres et du coup mes chaînes se retrouve avec des blancs ou tout se decale.
    Quelqu'un pourrait m'aider à recuperer ces noms là un par un? comment faire?
    Merci beaucoup de votre aide.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est pourtant bien fgets() qu'il faut utiliser.
    Par contre, n'appelle pas ton fichier ".ini" s'il n'a pas le format d'un vrai fichier .ini.

    Peux-tu essayer avec fgets() et poster ton code ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    J'ai fait par plusieurs methodes...
    Pour le premier nom c'est ok (avec #define TAILLE1 5; et le nom du fichier à ouvrir doit faire 4 caracteres), il me l'ouvre bien. mais pour les autres il ne veux pas...en plus j'ai defini une chaine de 5 mais en realité le nom peut etre plus ou moin grand...
    j'aimerais que le programme prenne le nom (nombres de caractere plus ou moins grand) et des qu'il y a un retour chariot il passe sur les autres...j'ai passé toute la soirée hier, j'ai aussi essayé avec fgetc je n'y suis pas arrivé...

    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
    47
    48
    49
    50
    51
    52
    53
    54
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> /*librairie permettant d'utiliser strcmp qui compare
                        des chaines de caracteres. */
    #define TAILLE1 5
     
    FILE* fichier = NULL;
    FILE* config_ini = NULL;/*création d'un pointeur de FILE, permettant par la suite
    la verification de l'ouverture du fichier.*/
    //char nom_fichier[8];/*declaration d'une chaine accueillant le nom du fichier à ouvrir ou à créer.*/
    char chaine[TAILLE1] = "";
     
    long  a;
     
    int main()
    {
    config_ini = fopen("config.ini", "r");//ouverture de nom_fichier
    if (config_ini != NULL)
        {
        fseek(config_ini,0,SEEK_SET);
        while (fgets(chaine, TAILLE1, config_ini) != NULL)
          {
          //i=i+1;
           //printf("nombre de ligne= %d\n",i);
           a= ftell(config_ini);
           printf("position du pointeur= %ld\n",a);
           printf("la chaine est %s\n",chaine);
           system("PAUSE");
           fichier = fopen(chaine, "r");
                if (fichier!= NULL)
                {
                  printf("fichier %s ouvert\n\n",chaine);
                  system("PAUSE");
                }
                else
                {
                printf("\n\nImpossible d'ouvrir le fichier...\n");
                system("PAUSE");
                }
                fclose(fichier);
     
          }
     
     
     
        }
    else
        {
        printf("\n\nImpossible d'ouvrir le fichier...");
        system("PAUSE");
        }
        fclose(config_ini);
    return 0;
    }
    Merci pour ton aide...

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu n'as pas à utiliser fseek().
    De plus, fgets() s'arrête immédiatement après le \n de chaque ligne. Donc, il te suffit de donner une taille de ligne assez grande, et tu n'auras pas de problèmes...

    J'ai corrigé ton code:
    Code C : 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> /*fichier d'en-tête déclarant strcmp(), strchr()... */
     
    #define TAILLE1 80
     
    void TraiterFichier(char const *nomFichier)
    {
    FILE *pfinFichier = fopen(nomFichier, "r");
    if (pfinFichier!= NULL)
    	{
    	printf("\t\tfichier \"%s\" ouvert\n",nomFichier);
     
    	/* ... */
     
    	fclose(pfinFichier);
    	}
    else
    	{
    	printf("\t\tErreur: Echec d'ouverture le fichier.\n");
    	}
    }
     
    int main(void)
    {
    FILE *pfinListe = NULL;
     
    puts("Ouverture du fichier de liste...");
    pfinListe = fopen("config.txt", "r");
    if (pfinListe != NULL)
    	{
    	char nomFich[TAILLE1];
     
    	while (fgets(nomFich, TAILLE1, pfinListe) != NULL)
    		{
    		/* Vérification que le nom de fichier tient complètement
    		   Et on en profite pour retirer le \n. */
    		char *pLF = strchr(nomFich, '\n');
    		if(pLF == NULL)
    			{
    			puts("\tErreur: Nom de fichier trop long.");
    			break;
    			}
    		*pLF = '\0'; /*Tronque la chaîne juste avant le \n*/
     
    		printf("\tNom de fichier :\"%s\"\n", nomFich);
    		TraiterFichier(nomFich);
    		}
    	fclose(pfinListe);
    	}
    else
    	{
    	puts("Erreur: Echec d'ouverture le fichier de liste.");
    	}
     
    system("PAUSE");
    return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Là je dois partir, je regarde ça ce soir ou demain puis je te tiens au courant... PS c'est quoi le \t dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\tNom de fichier :\"%s\"\n", nomFich);
    Encore merci beaucoup je vais comment ça tourne...!

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est une tabulation. C'est pour que le texte soit décalé vers la droite.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    J'ai compilé ton code...ça marche pas.
    deja il me dis que le nom du fichier est trop long, et pourtant nom.. bref j'ai mis la ligne en commentaire et après il arrive à m'ouvrir que le dernier noms contenu dans la liste...il n'aime pas les retours chariot..des qu'il y en a un après un nom il ne peut l'ouvrir...comment faire?
    merci

    ah c'est bon j'y suis arrivé...merci pour tout! excelent..
    j'ai pas trop compris ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *pLF = strchr(nomFich, '\n');
    et
    Merci encore!

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par polodu84 Voir le message
    j'ai pas trop compris ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *pLF = strchr(nomFich, '\n');
    strchr() est une fonction standard du C. Recherche de l'adresse de '\n' dans la chaine.
    A l'adresse trouvée (si elle n'est pas NULL, il faut le tester), remplacer le caractère présent par 0, qui est la marque de fin de chaine.

    Il y a quelques notions élémentaires du C à connaitre pour programmer en C...

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2010, 11h12
  2. Réponses: 2
    Dernier message: 01/04/2009, 13h54
  3. Lister le nom des fichier contenu dans un zip.
    Par ThanosT dans le forum C#
    Réponses: 1
    Dernier message: 28/05/2008, 23h05
  4. [PDF] Ouvrir des fichiers PDF dans page Web
    Par ludoweb dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 07/09/2006, 08h13
  5. Ecrire les noms des fichiers dans une colonne
    Par REGIMBAL dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 11h29

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