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 :

Composition d'un nom de fichier pour recherche


Sujet :

C

  1. #1
    Membre confirmé Avatar de tchalkost
    Inscrit en
    Juillet 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 102
    Par défaut Composition d'un nom de fichier pour recherche
    Bonjour a tous

    Voila j’ai créé un programme qui recherche un fichier nommé "V:\Prele...FRA-7787..87-%date_entree%-?????.dvi".

    Le paramètre qui change c’est %date_entree%. Les points d’interrogations sont des chiffres qui sont crée par le programme, mais qui ne m’intéresse pas car ma recherche s’effectue sur les dates.

    Pour composer le nom du fichier a recherché j’ai utilisé cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     //Demande du nom de fichier
    	printf("Veuillez saisir la date de la recherche :\n");
    	scanf("%s", &daterecherche);
     
    	//Traitement du nom du fichier
    	strcpy (nomfic_src, "V:\\Prele...FRA-7787..87-");
    	strcat (nomfic_src, daterecherche);
            strcat (nomfic_src, "????????");
    	strcat (nomfic_src, ".txt");

    1. Comment est-ce que je pourrais faire pour que dans la composition du nom de mon fichier je puisse ne pas prendre en compte les points d’interrogations ?


    2. Le fichier ayant l’extension .dvi je n’ai pas pu l’ouvrir. J’ai fai un test en le modifiant en .txt et ça fonctionne. Le fichier .dvi est bien sûr lisible par le bloc-notes. Comment pourrais-je donc lui faire ouvrir un fichier .dvi par le programme ?

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Et l'algo il est ou l'algo pour ce code ?

  3. #3
    Membre confirmé Avatar de tchalkost
    Inscrit en
    Juillet 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 102
    Par défaut
    Bon d'accord j'ai oublié le code

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    void main (void)
    {
     
    	//Declarations de variable
    	FILE *srcPCA = NULL, *copiePCA = NULL;
    	//PCA == Prelevement du Credit Agricole
    	char buffertemp[NB_CH_MAX], buffercopie[NB_CH_MAX];
    	char daterecherche[6];
    	char nomfic_src[NB_CH_MAX], nomfic_copie[NB_CH_MAX];
    	char nomdossier_cree[30];
     
    	//Demande du nom de fichier
    	printf("Veuillez saisir la date de la recherche :\n");
    	scanf("%s", &daterecherche);
     
    	//Traitement du nom du fichier
    	strcpy (nomfic_src, "PrelevementCRCAVALFRA-77890285415-");
    	strcat (nomfic_src, daterecherche);
    	strcat (nomfic_src, ".txt");
     
    	//Ouverture du fichier en mode lecture, pour verifier son existance
    	srcPCA = fopen(nomfic_src, "r");
     
    	//Lecture du fichier source, si c'est possible
    	if (srcPCA != NULL)
    	{
     
    		//----------------------CREATION-DOSSIER---------------//
    		//Creation du nom du nouveau dossier
    		strcpy (nomdossier_cree, daterecherche);
    		strcat (nomdossier_cree, "-9h00m00s");
     
    		//Creation d'un nouveau dossier
    		mkdir(nomdossier_cree);	//WARNING SUR  <<MKDIR>> ???????
    		//Confirmation de la creation d'un dossier
    		printf("Le dossier %s est cree\n", nomdossier_cree);
     
     
    		//------VERIFICATION-LECTURE-AVEC-AFFICHAGE---------//
    		//Tant que le fichier n'est pas vide
    		do
    		{
    			//Lecture ligne/ligne stockage dans "buffertemp"
    			fgets (buffertemp, NB_CH_MAX, srcPCA);
    			//Affichage du contenu a l'ecran
    			printf("String = %s.\n", buffertemp);
    		}
    		while (feof(srcPCA) == 0);
     
    		//fermeture du fichier
    		fclose (srcPCA);
     
     
    		//-------------------COPIE-FICHIER--------------------//
    		//Creation du nom du fichier copie
    		strcpy (nomfic_copie, daterecherche);
    		strcat (nomfic_copie, ".txt");
     
     
    		//Ouverture du fichier source en lecture
    		fopen (nomfic_src, "r");
    		if (srcPCA)
    		{
    			//Ouverture du fichier copie en mode ecriture
    			copiePCA = fopen (nomfic_copie, "w");
    			//Ouverture d'un fichier << copiePCA >>
    			if (copiePCA)
    			{
    				//Tant que la fin du fichier n'est pas atteint
    				do
    				{
    					//Lecture ligne/ligne stockage dans buffercopie
    					fgets (buffercopie, NB_CH_MAX, srcPCA);
    					//Ecrit dans copiePCA le contenu de buffercopie
    					fprintf(copiePCA, "%s", buffercopie);
    				}
    				while (feof (srcPCA) == 0);
    			}
    			//Fermeture du fichier de copie
    			fclose (copiePCA);
    		}
    		//Fermeture du fichier source
    		fclose (srcPCA);
    	}
    	//Gestion des erreurs
    	else
    	{
    		printf("Ouverture du fichier %s impossible !\n", nomfic_src);
    	}
     
    }
    Dans ce code j'ai volontairement enlevé les points d'interrogations mentionnés dans mon premier post, ne sachant pas comment faire j'ai préférer me concentrer sur le corps du programme avant tout.

    Merci

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par tchalkost
    1. Comment est-ce que je pourrais faire pour que dans la composition du nom de mon fichier je puisse ne pas prendre en compte les points d’interrogations ?
    T'ouvres le répertoire, tu parcours les fichiers et tu regardes si y en a qui t'intéresse.

    2. Le fichier ayant l’extension .dvi je n’ai pas pu l’ouvrir. J’ai fai un test en le modifiant en .txt et ça fonctionne. Le fichier .dvi est bien sûr lisible par le bloc-notes. Comment pourrais-je donc lui faire ouvrir un fichier .dvi par le programme ?
    Il n'y a aucune raison que ton programme refuse les .dvi ou les .txt, ton programme doit simplement être faux.

    Jc

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Mes commentaires sont dans le code: /* -TC- ... */
    Citation Envoyé par tchalkost
    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
     
    /* -TC- Selon la norme, main doit renvoyer un entier de type int 
               void main(void) n'est pas une syntaxe correcte*/
    int main (void)
    {
     
    	//Declarations de variable
    	FILE *srcPCA = NULL, *copiePCA = NULL;
    	//PCA == Prelevement du Credit Agricole
     
            /* -TC- combien vaut NB_CH_MAX? */
    	char buffertemp[NB_CH_MAX], buffercopie[NB_CH_MAX];
    	char daterecherche[6];
    	char nomfic_src[NB_CH_MAX], nomfic_copie[NB_CH_MAX];
    	char nomdossier_cree[30];
     
    	//Demande du nom de fichier
    	printf("Veuillez saisir la date de la recherche :\n");
     
            /* -TC- La syntaxe de scanf est incorrecte. datarecherche est un 
                       tableau de caractère. datarecherche est équivalent à
                       &datarecherche[0] */
    	/* -TC- scanf("%s", daterecherche); */
            /* -TC- Cette utilisation de scanf est dangereuse si l'utilisateur entre 
                       plus que 5 caractères! Utiliser fgets dans ce cas!!!*/
            fgets(datarecherche, 6, stdin);
     
     
    	//Traitement du nom du fichier
     
            /* -TC- Ne jamais utiliser strcpy. C'est un bug en soit cette fonction!
                       Remplacer par strncpy() */
    	strncpy (nomfic_src, NB_CH_MAX, "PrelevementCRCAVALFRA-77890285415-");
            /* -TC- Même remarque pour strcat et strncat */
    	strncat (nomfic_src, daterecherche, NB_CH_MAX-1-strlen(nomfich_src));
    	strncat (nomfic_src, ".txt", NB_CH_MAX-1-strlen(nomfich_src));
     
    	//Ouverture du fichier en mode lecture, pour verifier son existance
    	srcPCA = fopen(nomfic_src, "r");
     
    	//Lecture du fichier source, si c'est possible
    	if (srcPCA != NULL)
    	{
     
    		//----------------------CREATION-DOSSIER---------------//
    		//Creation du nom du nouveau dossier
                    /* -TC- N'utilise jamais strcpy: voir plus haut */
    		strcpy (nomdossier_cree, daterecherche);
                    /* -TC- voir plus haut */
    		strcat (nomdossier_cree, "-9h00m00s");
    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par mujigka
    Mes commentaires sont dans le code: /* -TC- ... */
    Je me permets quelque remarques :

    * fgets(datarecherche, 6, stdin); devient fgets(datarecherche, sizeof datarecherche, stdin);
    * strcpy() pour une chaine ne provenant pas de l'exterieur et dont la taille est maitrisee n'est pas problematique.
    * strncpy() pose egalement des problemes lors de la saturation (le '\0' final peut ne pas etre mis), strncat() ne presente pas ce probleme.

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par gl
    Je me permets quelque remarques :

    * fgets(datarecherche, 6, stdin); devient fgets(datarecherche, sizeof datarecherche, stdin);
    J'approuve à 100%!

    Citation Envoyé par gl
    * strcpy() pour une chaine ne provenant pas de l'exterieur et dont la taille est maitrisee n'est pas problematique.
    * strncpy() pose egalement des problemes lors de la saturation (le '\0' final peut ne pas etre mis), strncat() ne presente pas ce probleme.
    Autant pour moi! Selon la doc de strncpy: http://man.developpez.com/man3/strncpy.3.php

    Citation Envoyé par Soc de strncpy
    La fonction strncpy() est identique, sauf que seuls les n premiers octets de src sont copiés. Ainsi, s'il n'y a pas de caractère nul dans les n premiers octets de src, la chaîne résultante ne disposera de caractère nul final.
    L'utilisation de strncpy à la place de strcpy est néanmoins une pratique recommandable. Autant prendre de bonnes habitudes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strncpy (nomfic_src, NB_CH_MAX-1, "PrelevementCRCAVALFRA-77890285415-");
    nomfic_src[NB_CH_MAX-1] = '\0'; /* Autant prévenir que guérir */
    Meilleures salutations et merci gl pour les précisions

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Extraire les noms des fichiers pour les utiliser en variable
    Par Sylver--- dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 18/02/2011, 13h57
  2. Ouverture de fichier pour recherche
    Par nirvanitta dans le forum Débuter
    Réponses: 1
    Dernier message: 12/04/2010, 09h57
  3. Réponses: 4
    Dernier message: 04/12/2007, 13h31
  4. lire nom de fichier pour sauvegarde ensuite sur presse papier
    Par chapeau_melon dans le forum VBScript
    Réponses: 3
    Dernier message: 21/03/2007, 20h35
  5. [D2005][CGI] Nom de fichier pour une image
    Par Argonaute dans le forum Web & réseau
    Réponses: 1
    Dernier message: 30/08/2005, 12h56

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