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 :

Decoupage fichier texte


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1
    Par défaut Decoupage fichier texte
    Bonjour,
    Je cherche une méthode rapide pour formater un fichier texte. Celui ci se présente sous cette forme :

    chaine_sans_importance0187Cla_premiere_chaine_de_lettre0187Cla_deuxieme_chaine_de_lettre0187Cla_troisieme_chaine_de_lettre0234Gchaine_sans_importance

    Le but de la manœuvre serait de lui donner cette forme

    0187Cla_premiere_chaine_de_lettre
    0187Cla_deuxieme_chaine_de_lettre
    0187Cla_troisieme_chaine_de_lettre

    La découpe se fait donc par rapport a la chaîne "0187C" J'ai donc commencé un petit programme qui me permettrais de faire ceci automatiquement...Cependant je galère un peu....Si qqn peut m'aider...
    Voici ce que j'ai fait jusqu'a présent:
    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
     
    main()
    {
    char char_lue;
    FILE * pFile_sortie;
      pFile_sortie = fopen ("c:\\temp\\sortie.txt","wt");
     
    FILE * pFile_entree;
      pFile_entree = fopen ("c:\\temp\\entree.txt","r");
     
    fread (char_lue,sizeof(char*),1,pFile_entree);
     
    CString chaine
     
    while (char_lue != end of file)
    {
    	chaine += char_lue;
    	if (« les 5 derniers carateres de la chaine » == 0187C)
    	{
    		fwrite(char_lue, sizeof(char), sPremLigne.GetLength(), pfFile_sortie);  //Ecrit le texte
    		fwrite(retour_chariot, sizeof(char), retour_chariot.length(), pfFile_sortie); // ecrit le saut de ligne
    	}
    	fread (char_lue,sizeof(char*),1,pFile_entree);
    }
    }
    Merci pour vos réponses que j'espères positives !
    Steal.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Par défaut
    On utilise fread et fwrite pour des fichiers binaires. Dans ce cas tu devrais ajouter un 'b' à tes jetons. Utilise plutôt fgets et fprintf et n'oublie pas de refermer les fichiers. Utilise aussi les fonctions strtok et strchr pour découper et te déplacer dans ta chaîne.

  3. #3
    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 Re: Decoupage fichier texte
    Citation Envoyé par Stealkilandhide
    Je cherche une méthode rapide pour formater un fichier texte. Celui ci se présente sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine_sans_importance0187Cla_premiere_chaine_de_lettre0187Cla_deuxieme_chaine_de_lettre0187Cla_troisieme_chaine_de_lettre0234Gchaine_sans_importance
    Le but de la manœuvre serait de lui donner cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    0187Cla_premiere_chaine_de_lettre
    0187Cla_deuxieme_chaine_de_lettre
    0187Cla_troisieme_chaine_de_lettre
    A la volée (logique séquentielle):
    • Une lecture caractères par caractères. (fgetc())
    • Un mini automate d'état pour detecter l'endroit où couper.

    Sinon, charger la chaine en mémoire, memoriser le début, chercher le marqueur (strstr()), couper la chaine avec un 0, afficher, remettre le marqueur effacé par le 0, recommencer de là...

  4. #4
    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 crackeurz
    On utilise fread et fwrite pour des fichiers binaires.
    Pouquoi ? Aucune loi n'interdit de lire un fichier texte avec fread(). L'important est que l'ouverture ait bien été faite en mode texte ("r")

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Par défaut
    J'ai lu dans un tutorial que les fonctions fread et fwrite étaient désignées comme étant des fonctions d'entrées/sorties binaires.

  6. #6
    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 crackeurz
    J'ai lu dans un tutorial que les fonctions fread et fwrite étaient désignées comme étant des fonctions d'entrées/sorties binaires.
    C'est des c*nneries... Elles savent le faire, elles sont bien adaptées à ça, mais pas uniquement.

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut
    Soit on charge tout le fichier en mémoire s'il n'est pas trop gros (on lit la taille du fichier, on fait un malloc de la taille (plus 1 comme protection avec le strstr) et on lit tout avec un fread) et on fait la deuxième méthode préconisée par Emmanuel,
    soit on utilise la première méthode avec l'automate
    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
    On utilise deux variables
    etat : état de l'automate qui prend 5 valeurs de 0 à 4 suivant la longueur de la chaîne "0187C" lue
    prologue qui indique si la première chaîne "0187C" a été lue
     
    initialisation
    etat = 0
    prologue = 0
    tant que le caractère lu c n'est pas la fin de fichier faire
      choix sur etat
         cas 0 : si c = '0' alors 
                      etat = 1
                   sinon
                     si prologue = 1 alors
                       ecrire c
                     fin si
                   fin si
                   fin cas
        cas 1 : si c = '1' alors
                      etat = 2
                 sinon
                     si prologue = 1 alors
                        ecrire '0'
                     fin si
                     si c <> '0' alors
                        etat = 0
                        si prologue = 1 alors
                          ecrire c
                        fin si 
                     fin si
                   fin si
                   fin cas
        cas 2 : si c = '8' alors
                      etat = 3
                  sinon
                     si prologue = 1 alors
                        ecrire '0'
                        ecrire '1'
                     fin si
                     si c <> '0' alors
                        etat = 0
                        si prologue = 1 alors
                          ecrire c
                        fin si 
                     fin si
                   fin si
                   fin cas
        cas 3 : si c = '7' alors
                      etat = 4
                  sinon
                     si prologue = 1 alors
                        ecrire '0'
                        ecrire '1'
                        ecrire '8'
                     fin si
                     si c <> '0' alors
                        etat = 0
                        si prologue = 1 alors
                          ecrire c
                        fin si 
                     fin si
                   fin si
                   fin cas
        cas 4 : si c = 'C' alors
                      ecrire nouvelle ligne
                      ecrire '0'
                      ecrire '1'
                      ecrire '8'
                      ecrire '7'
                      ecrire 'C'
                      etat = 0
                      prologue = 1
                  sinon
                     si prologue = 1 alors
                        ecrire '0'
                        ecrire '1'
                        ecrire '8'
                        ecrire '7'
                     fin si
                     si c <> '0' alors
                        etat = 0
                        si prologue = 1 alors
                          ecrire c
                        fin si 
                     fin si
                   fin si
                   fin cas
        fin choix
    fin tant que
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. Decoupage d'un fichier texte avec cut
    Par tesla dans le forum Linux
    Réponses: 3
    Dernier message: 28/06/2004, 15h39
  2. Réponses: 1
    Dernier message: 12/02/2003, 09h36
  3. [VB6] Ecrire/Modifier/Effacer ds un fichier text-4 Chs/Lg
    Par Jonathan_Korvitch dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 24/12/2002, 18h54
  4. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

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