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 :

fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut fichier
    Bonjour,
    voila je suis bloquer et j aimerai savoir si vous pourriez m aider
    en fait j ai un fichier texte par exemple
    je m appelle federer 
    je suis le meilleur joueur de tennis 
    mais plus pour longtemps
    et j aimerai rajouter du texte <balise> au début de la ligne et à la fin de chaque ligne
    En fait le même fichier texte deviendra
    <balise> je m appelle federer</balise> 
    <balise> je suis le meilleur joueur de tennis</balise> 
    <balise> mais plus pour longtemps </balise> 
    En réalité mon programme et plus complexe, mais si je débloque sur cette question, je pense pouvoir m'avancer.
    merci

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Si tu as droit au getline ou fgetln, alors tu peux tout simplement :
    - Ouvrir ton fichier en lecture, ouvrir un fichier temporaire en écriture,
    - Récupérer chaque ligne de ton fichier initial (getline/fgetln),
    - Ecrire ta "balise" en sortie, ecrire ce que tu as récupéré de getline/fgetln,
    - (cela tant que le fichier initial n'est pas vide)
    - Fermer les 2 fichiers
    - unlink le fichier initial, et renommer le fichier de sortie en écriture vers le nom du fichier initial
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    ll te suffit de lire les lignes avec fgets puis d'écrire dans un second fichier la balise de début de ligne, le contenu de la ligne lue, la balise de fin de ligne ainsi qu'un retour à la ligne grâce à fputs.

    Qu'est-ce qui te bloque ?

    EDIT : On part quelques instant et on se fait grillé par Metalman

    Sinon getline ne semble pas être standard (extensions GNU) et fgetln n’apparaît même pas dans le man.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    je m appelle federer
    je suis le meilleur joueur de tennis
    Oui oui oui

    mais plus pour longtemp
    Hein ? Nom de.....


    Et sinon :
    et j aimerai rajouter du texte <balise> au debut de la ligne et a la fin de chaque lignes
    Metalman et Neckara t'ont déjà presque tout dit. Tu ne pourras pas de manière simple modifier le fichier sur place, tu devras passer par un second fichier qui écrasera le premier.

    Pour lire, fgets() est en effet portable, tu devrais donc l'utiliser. Attention à bien calibrer ton buffer par rapport à la taille de tes lignes et à bien vérifier la présence d'\n à chaque lecture pour savoir si la ligne est entière ou non.

    A noter qu'une boucle pour lire un fichier de ne doit pas être de la forme
    while(!feof(){ action } : http://c.developpez.com/faq/?page=es_general#ES_feof

    Pour écrire, tu peux utiliser fprintf("<balise>%s<balise>\n", ligneLue). A adapter si tu n'arrives pas à récupérer la ligne entière en un seul fgets() et attention à \n.

    EDIT : j'ai tenté, voici un code qui fait le boulot. Si des gens ont des remarques, je suis preneur.
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdbool.h>
     
    #define READ_BUFFER_LEN 5
     
    int main(void)
    {
        FILE *inputFile = fopen("fichier.txt", "r"); // return values of fopen() should be checked
        FILE *outputFile = fopen("temp.txt", "w");
     
        char readBuffer[READ_BUFFER_LEN] = {0};
     
        const char * const openTag = "<balise>";
        const char * const closeTag = "</balise>";
     
        bool processingMultiReads = false; // indicate if the current line needs to multiple reads
     
        while( fgets(readBuffer, READ_BUFFER_LEN, inputFile) != NULL )
        {
            printf("%s", readBuffer);
     
            if(readBuffer[strlen(readBuffer)-1] == '\n')
            {
                readBuffer[strlen(readBuffer)-1] = '\0'; // delete '\n' in the buffer
     
                if(processingMultiReads == false)
                {
                    fprintf(outputFile, "%s%s%s\n", openTag, readBuffer, closeTag );
                }
                else
                {
                    processingMultiReads = false; // EOL reached
                    fprintf(outputFile, "%s%s\n", readBuffer, closeTag);
                }
            }
            else
            {
                if(processingMultiReads == false)
                {
                    processingMultiReads = true;
                    fprintf(outputFile, "%s%s", openTag, readBuffer );
                }
                else
                {
                    fprintf(outputFile, "%s", readBuffer);
                }
            }
        }
     
        if(feof(inputFile) != 0)
        {
            puts("Fin du fichier atteinte, traitement OK.");
        }
        else
        {
            perror("Erreur lors de la lecture");
        }
     
        fclose(inputFile);
        fclose(outputFile);
    }

  5. #5
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Désolé Neckara pour avoir posté trop tôt ! xD

    Sinon : man fgetln !
    Mais je me base peut être trop souvent sur les man FreeBSD alors que les gens sont sous Linux...
    Car dans "History" en bas, il n'y a que 4.4BSD (sur les autres on peut voir un paragraphe avec quel POSIX la fonction est compliant... cf : man getline qui est POSIX compliant quand même :o )

    EDIT : man fgets
    En effet ça lit aussi des lignes !
    Et celle-la est ISO compliant !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut
    salut tous le monde

    je vous remercie de m avoir donner de l aide,

    je suis un programmeur de java et concepteur de base de donnees

    mais j'éprouve beaucoup de difficultés en c.

    Un gros merci encore pour votre aide

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

Discussions similaires

  1. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  2. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  3. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37
  5. Fichier PDOXUSRS.NET
    Par yannick dans le forum Paradox
    Réponses: 5
    Dernier message: 05/04/2002, 09h45

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