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 :

Traitement du fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut Traitement du fichier
    Salut,

    J'ai un fichier qui se compose de deux champs :

    - numero présenté par un entier
    - attribut présenté par une chaine caractère.

    On a la même taille pour le champ attribut dans toutes les lignes du fichier.

    Par exemple, Soit le fichier nommé essai.txt:

    1 110101
    2 100101
    3 110101
    4 000101
    5 000000
    6 110101
    7 110101
    8 000000
    9 010101
    10 100101

    Le travail demandé est:

    - Supprimer des lignes du fichier essai.txt qui contiennent comme chaine caractere "000000"
    Dans notre exemple, on doit supprimer les deux lignes suivantes:

    5 000000
    8 000000

    -Supprimer des colonnes du la chaine attribut pour chaque ligne sachant que cette colonne est tout à 0 dans toutes les chaines du fichier.

    Dans notre exemple, on remarque que la colonne 3 et 5 sont toutes à 0.


    En conclusion, on obtient le résultat suivant qui présente un fichier (on peut travailler sur le même fichier ou autre)
    après la suppression des lignes et des colonnes faite :

    1 1111
    2 1011
    3 1111
    4 0011
    6 1111
    7 1111
    9 0111
    10 1011


    Je dois faire un programme C sous Windows permettant du supprimer des lignes et des colonnes comme décrit précédament.
    J'ai trouvé des difficultés à manipuler les positions du curseur dans un fichier de plus je ne sais pas si il y a des
    fonctions prédéfinis dans C qui permettent du supprimer des lignes et des colonnes selon un critère.

    S'il vous plait,Pouvez-vous m'aider ?

    Merci.

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Salut,

    - Après la suppression d'une ligne qui contient la chaine "000000", il reste une ligne vide.
    Comment j'évite cette ligne vide ?

    - Pour la suppression d'une colonne:
    lorsque je trouve un 0 en position k dans la chaine de première ligne.
    comment je vais déplacer en position k dans la chaine de celui de reste des lignes c-à-d ligne 2, 3 jusqu'à la dernière ligne ?
    car on doit supprimer la colonne de la chaine qui est 0 dans toutes les chaines

    Merci.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Je ne comprends pas du tout ce que tu veux dire ici :

    -Supprimer des colonnes du la chaine attribut pour chaque ligne sachant que cette colonne est tout à 0 dans toutes les chaines du fichier.

    Dans notre exemple, on remarque que la colonne 3 et 5 sont toutes à 0.
    Peux-tu expliquer plus clairement ?

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Salut,

    J'ai un fichier texte bien formé contient deux champs: objet et attribut.
    tous les objets sont des entiers et tous les attributs sont de chaines de caractères de même taille.
    chaque ligne contient un objet et son attribut par exemple:

    essai.txt:

    10 1110001
    20 1010100
    30 0100101
    37 0000000
    40 1000101
    50 0000000
    80 1110001
    100 1010001


    1) je voudrais supprimer les lignes qui contiennent une chaine qui est toute à 0 par exemple dans notre on a "0000000"

    Donc, on doit supprimer les lignes suivantes:
    37 0000000
    50 0000000

    2) Je voudrais supprimer les 0 de même position dans chaque chaine de caractère. J'appelle ceci la suppression des colonnes.
    Par exemple dans notre cas, nous allons supprimer les 0 dans la position 4 et 6 de chaque chaine car dans cette position nous avons toutes les chaines ont un 0 dans la position 4 et 6.

    j'ai trouvé une difficulté de résoudre ce problème, de plus imaginez si nous avons un fichier volumineux (donc c'est couteux d'utiliser une autre structure en mémoire pour faire des traitements nécessaires).

    Mon idée:

    1) Pour la suppression des lignes: je parcoure ligne par ligne et je vérifie c'est la chaine de cette ligne est égale au "0000000" alors je supprime cette ligne.
    Comment je vais supprimer cette ligne ? Et après la suppression, est ce qu'il reste une ligne vide(comme une entrée) ? Si oui, comment je éviter cette ligne vide

    2) Pour la suppression des colonnes: Je parcoure seulement la première ligne de fichier. Pour tout 0 de chaine de première ligne je teste si je trouve dans position p un 0 dans la chaine du première ligne alors je vérifie si je trouve 0 dans la même position p dans les chaines des autres lignes.
    Cette solution este théorique. Imaginez si nous avons un fichier volumineux.De plus, comment je vais déplacer dans le fichier dans la bonne position ?

    A la fin, je ne dois pas obtenir un résultat comme çà :
    10 11101
    20 10110
    30 01011

    40 10011

    80 11101
    100 10101

    Mais, Le résultat voulu est( dans le même fichier ou autre fichier) :

    essai.txt:

    10 11101
    20 10110
    30 01011
    40 10011
    80 11101
    100 10101


    S'il vous plait, j'ai besoin de vos aides.
    Merci.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Je pense que le meilleur est de faire deux fois le parcours du fichier. Disons que l'on va travailler sur trois fichiers ( ou peut tout faire dans un seul ).
    Le premier parcours que l'on fera, est simple ( et logique ) car c'est le sens de la lecture.

    Je voudrais juste dire, que les numeros de lignes, s'il sont présents dans le fichier à traiter, on peux les enlever ( de la prise en compte ) par un sscanf(file,%d,&poubelle) (enlever d'un int ) car ils sont séparés d'un espace avec le reste.

    Après il faudra faire une lecture caractère par caractère.

    Première lecture donc, pour toute ligne du fichier ( while ( != EOF ) peut fonctionner )
    On enlève le numéro de ligne
    On lit les caractères 1 par 1, jusqu'à atteindre la prochaine ligne ( caractère \n permet de savoir si on a atteint la fin de la ligne ).
    Dans cette boucle pour lire la ligne, on va utiliser un flag ( valeur pouvant être soit 0 soit 1 ) ( sorte de boolean ) pour savoir si on a lu un 1 sur la ligne.
    Si on a lu un 1 sur la ligne on sauvegarde la ligne dans le deuxième fichier ( il faudra un tableau pour sauvegarder chaque caractère afin de les réecrire ).
    Bien sur, s'il n'y a pas eu de 1 on peut passer à la ligne suivant sans sauvegarder.

    Maintenant il va falloir traiter le deuxième fichier.
    En fait, c'est à un peu près le même principe sauf que la lecture se fait colonne par colonne.
    Pour déplacer le curseur de lecture, il faut utiliser fseek() ( voir la page de man ).
    Pour ce faire correctement il faut connaitre la longueur ( nombre de caractère ) d'une ligne.

    Note: la lecture d'un caractère ( sscanf ou fread ) fait avancer le curseur de la donnée lu.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Salut,

    - J'ai résolu la partie de suppression des lignes. Mais, elle me reste la partie du suppression des colonnes.

    donnée:
    Chaque ligne du fichier texte contient deux champs: un objet présenté par un entier et un attribut présenté par une chaine de caractère.
    Le fichier est bien formé puisque il est rempli de manière suivante:
    fprintf("%10d%s",objet,attribut);

    - Pour la suppression des colonnes, j'ai trouvé une difficulté à programmer mon idée suivante:
    Je positionne sur le premier caractère de chaine de caractère (deuxième champ) du première ligne du fichier. Je teste caractère par caractère si égale à 0, par exemple si on trouve 0 à la position k du la chaine du caractère alors je dois positionner sur la même position k du la chaine du caractère de deuxième ligne alors je teste si ce caractère égale à 0 alors je dois positionner sur la même position k du la chaine du caractère de troisième ligne jusqu'à la fin du fichier. Dans le cas que si n'est pas égale à 0 alors j'arrête ce n'est pas la peine de continuer de voir les autres lignes restantes mais je dois retourner seulement à la position k +1 du chaine du première ligne pour tester si égale à 0 ou non . Si ce n'est pas égale à 0 alors je teste de même manière les caractères restantes jusqu'à la fin du ligne.

    Autre optimisation, Si je ne trouve aucun 0 dans la chaine du caractère du première ligne alors c'est inutile de voir les autres lignes donc on s'arrête et on a aucun colonne à supprimer.
    Cette idée permet de trouver les positions à supprimer. Mais, je ne sais pas comment je vais les supprimer.

    Avez-vous une idée ?

    S'il vous plait, j'ai besoin de vos aides pour programmer cette idée et pourquoi pas à améliorer.

    Merci.

Discussions similaires

  1. [Traitement de fichiers] substitutions
    Par david_m dans le forum Langage
    Réponses: 3
    Dernier message: 04/01/2006, 09h27
  2. traitement de fichier
    Par loic_86 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/11/2005, 17h56
  3. Réponses: 1
    Dernier message: 24/07/2005, 22h25
  4. TRaitement de fichier avec PERL
    Par Dr_GonZO dans le forum Langage
    Réponses: 4
    Dernier message: 22/07/2005, 12h38
  5. traitement de fichier XML dans une Tache planifiée
    Par marivi dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 21/06/2005, 10h40

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