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 :

Créer 2 fichiers en format .txt


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut Créer 2 fichiers en format .txt
    Bonsoir à tous,

    J'aimerais créer 2 fichiers en format.txt ! D'abord le premier fichier doit s'appeler fichier1 et le second fichier2. Y a des tutos dans le forum mais je comprends pas celui-ci ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char src[FILENAME_MAX]; /* FILENAME_MAX est defini dans stdio.h */
        FILE * fsrc;
     
        printf("Ce programme permet de copier un fichier.\n");
        printf("source : ");
        saisir_chaine(src, sizeof(src));
     
        fsrc = fopen(src, "rb");
        if (fsrc == NULL)
            perror(src);
    Donc, moi j'aurais procédé ainsi pour créer mon fichier1, mais ça ne fonctionne pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char src[FILENAME_MAX]; /* FILENAME_MAX est defini dans stdio.h */
        FILE * fsrc;
     
        printf("Ce programme permet de copier un fichier.\n");
        printf("source : ");
        saisir_chaine(src, sizeof(src));
     
        fsrc = fopen("fichier1.txt, "rb");
        if (fsrc == NULL)
            perror(src);
    Par contre, je ne sais pas ce que signifie FILENAME_MAX ???

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Tamzoro Voir le message
    J'aimerais créer 2 fichiers en format.txt ! D'abord le premier fichier doit s'appeler fichier1 et le second fichier2.

    Donc, moi j'aurais procédé ainsi pour créer mon fichier1, mais ça ne fonctionne pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fsrc = fopen("fichier1.txt, "rb");
        if (fsrc == NULL)
            perror(src);
    Tu ne sens pas qu'il manque un truc sur la première ligne ? Indice: regarde les couleurs...
    Accessoirement tu veux ouvrir des fichiers textes, et tu les ouvres au format "rb" (b=binaire). Ca n'a aucune influence sur les systèmes de type Unix/Linux (pour lui il n'existe pas de spécificité "fichier texte", tout est du binaire) mais sous Zindow
    Et tu as oublié de mlgrer la ligne perror(src) qui doit bien évidemment s'adapter au nouveau nom de fichier que tu utilises...

    Citation Envoyé par Tamzoro Voir le message
    Par contre, je ne sais pas ce que signifie FILENAME_MAX ???
    Ca signifie textuellement "nombre de caractères maximal que peut prendre un nom de fichier". Ca dépend bien évidemment de l'OS dans lequel tu te trouves.

  3. #3
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ca signifie textuellement "nombre de caractères maximal que peut prendre un nom de fichier". Ca dépend bien évidemment de l'OS dans lequel tu te trouves.
    Tout d'abord merci pour ta réponse ! J'ai finalement réussi à créer mes 2 fichiers... Mon programme doit tourner sur Windows et ne peut pas dépasser 64 octets... Donc ça signifie que je dois pas excéder 64 caractères ??? Parce que dans mon programme je dépasse les 100 caractères lorsque je fais une copie....

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tamzoro Voir le message
    Parce que dans mon programme je dépasse les 100 caractères lorsque je fais une copie....
    Il s'agit du nombre de caractères du nom du fichier, pas de son contenu !!!

  5. #5
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Il s'agit du nombre de caractères du nom du fichier, pas de son contenu !!!
    T'es sûr ??? Voici l'exercice que je suis sensé faire...


  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Oui je suis sûr. D'ailleurs rien dans ton énoncé parle de la taille donnée aux noms de fichiers. Certes ces noms seront saisis par l'utilisateur mais ça m'étonnerait qu'un user relativement bien câblé coté cigare s'amuse à saisir plus de 20 caractères.

    Tu dois écrire un programme qui copie et éventuellement modifie durant la copie, le contenu d'un fichier1 dans un fichier2.
    Si par exemple ton fichier contient "voici venu les barbapapas, on fait les fous" et qu'il faut remplacer "ba" par "tamzoro" alors le fichier 2 contiendra "voici venu les tamzorortamzoropapas, on fait les fous".
    Tu dois pour ça utiliser une zone tampon (zone de travail) qui ne dépassera pas 64 octets. Et bien entendu, tu devras utiliser cette zone dans une boucle de lecture, afin de lire tout le fichier !!!

    C'est pas super compliqué. Le seul soucis c'est au cas où la chaine arriverait tronquée dans la zone tampon (le début de la chaine arrivant en fin de zone et la fin de la chaine arrivant en début de zone à l'itération suivante). Un algo simpliste n'arriverait alors pas à la trouver...

  7. #7
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Hello Sve@r,

    Je t'en suis reconnaissant pour toutes ces précisions... Première étape, je devais copier les caractères d'un fichier1 au fichier2 c'est fait, maintenant je dois effectuer un remplacement d'une chaine de caractère du fichier1 au fichier2, je ne vois pas trop comment faire ??? En cherchant sur le net j'ai lu qu'il fallait utilisé la fonction strstr ??? Mais je trouve pas d'explications ou d'exemples de code concret ???

    Voici déjà mon code pour la copie si ça t'intéresses, maintenant je vois pas trop où je pourrais placer cette fonction strstr ??? Je sais que je dois lire le fichier1 et ecrire dans le fichier2

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    main()
    {
     
    FILE *fichier1, *fichier2;
    char source[64], dest[64];
     
       	printf("Nom du fichier source :\n");
    	scanf("%s", source);
     
    	printf("Nom du fichier sortie :\n");
    	scanf("%s" , dest );
     
    fichier1 = fopen("entree.txt", "rb"); 
    if (fichier1 == NULL) {
     
        perror("Ouverture du fichier pour la lecture");
        exit(EXIT_FAILURE);
    }
     
    	fichier2 = fopen("sortie.txt", "wb");
    if (fichier2 == NULL) {
     
        perror("Ouverture du fichier pour l'ecriture");
        exit(EXIT_FAILURE);
    }
     
    	size_t n, m;
    	unsigned char buff[64];
    do {
        n = fread(buff, 1, sizeof buff, fichier1);
        if (n) m = fwrite(buff, 1, n, fichier2);
        else   m = 0;
    } while ((n > 0) && (n == m));
    if (m) perror("copy");
     
     
     
    fclose(fichier2);
    fclose(fichier1);
     
     
        system("pause");
    	return 0;
    }

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tamzoro Voir le message
    Voici déjà mon code pour la copie si ça t'intéresse

    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
    main()  // C'est trop fatiguant d'écrire "int" ??? Que se passera-t-il le jour où le type par défaut ne sera plus "int"... ???
    {
    char source[64], dest[64];  // Pourquoi 64 ??? Ne me dis pas que c'est encore à cause du buffer...
     
       	printf("Nom du fichier source :\n");
    	scanf("%s", source);
     
    	printf("Nom du fichier sortie :\n");
    	scanf("%s" , dest );
     
    fichier1 = fopen("entree.txt", "rb");  // Moui. On se demande pourquoi on a saisi le nom du fichier. Et c'est quand tu veux que tu prends en comptes mes remarques précédentes sur le "b"...
    if (fichier1 == NULL) {
     
        perror("Ouverture du fichier pour la lecture");
        exit(EXIT_FAILURE);
    }
     
    	fichier2 = fopen("sortie.txt", "wb");  // Pareil
    if (fichier2 == NULL) {
     
        perror("Ouverture du fichier pour l'ecriture");
        exit(EXIT_FAILURE);
        // Oui, tant qu'à faire, autant ne pas fermer le fichier 1...
    }
    Pour ton début de code, voir mes remarques en commentaire...

    Citation Envoyé par Tamzoro Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    do {
        n = fread(buff, 1, sizeof buff, fichier1);
        if (n) m = fwrite(buff, 1, n, fichier2);
        else   m = 0;
    } while ((n > 0) && (n == m));
    if (m) perror("copy");
    Un peu compliqué...

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while ((n=fread(buff, 1, sizeof buff, fichier1)) > 0)
    {
        if (fwrite(buff, 1, n, fichier2) != n)
        {
            perror("fwrite");
            break;
        }
    }
     
    if (n < 0)
        perror("read");

    Citation Envoyé par Tamzoro Voir le message
    En cherchant sur le net j'ai lu qu'il fallait utilisé la fonction strstr ??? Mais je trouve pas d'explications ou d'exemples de code concret ???
    Oui, c'est sûrement parce que le fonctionnement est super trivial !!! strstr(chaine_complète, chaine_cherchée) => te renvoie l'adresse où commence la chaine cherchée dans la chaine complète si celle-ci est présente sinon NULL. Je me demande même s'il n'y a pas un exemple dans le man(). Ceci dit, tu n'as pas le droit de l'utiliser car la variable "buffer" n'est pas une chaine (au sens "C" du terme). Et même si tu convertissais son contenu en chaine, tu pourrais tomber dans le cas dont j'ai parlé dans mon précédent post (chaine tronquée)...

    Citation Envoyé par Tamzoro Voir le message
    maintenant je vois pas trop où je pourrais placer cette fonction strstr ???
    Hé oui, c'est ce qu'on nomme "algorithme". Tu dois réfléchir comme le fait un ordinateur et trouver comment lui faire comprendre tes ordres. Si tu avais comme point de départ "voici venu les barbapapas, on fait les fous" lu de cette façon (dans un buffer de 6)
    • "voici "
    • "venu l"
    • "es bar"
    • bapapa"
    • "s on fa"
    • "it les f"
    • "ous"

    et que tu doives chercher "les" (2 fois dont une tronquée), comment tu ferais ???

  9. #9
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir Sve@r,

    Merci pour tes remarques, je vais corriger cela et revoir tout ça demain car il se fait tard.

    Bonne soirée à toi

Discussions similaires

  1. Créer un fichier au format kml
    Par Yann_69 dans le forum Général Java
    Réponses: 2
    Dernier message: 13/07/2012, 12h17
  2. Ouvrir, écrire, enregistrer, modifier, créer un fichier .txt
    Par Omion dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 11/12/2006, 08h50
  3. Conversion de fichier au format idx en txt
    Par mokhrim dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 06/12/2006, 00h35
  4. [VBA-E]Créer un fichier txt depuis une feuille Excel
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/02/2006, 18h36
  5. Réponses: 22
    Dernier message: 24/04/2005, 17h49

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