traitement d'un fichier

traitement d'un fichier - C - Programmation

Marsh Posté le 04-07-2009 à 20:39:36    

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:
 
1    11100
 
2    10101
 
3    01001
 
4    10001
 
 
Je voudrais supprimer les 0 de même position dans chaque chaine de caractère.
Par exemple dans notre cas, nous allons supprimer les 0 dans la position 4 de chaque chaine car dans cette position nous avons toutes les chaines sont à 0.
 
j'ai trouvé une difficulté de résoudre ce problème, de plus imaginez si nous avons un fichier volumineux.
 
Mon idée:
je parcoure seulement la première ligne de fichier. Pour tout 0 de chaine de première ligne je teste si je trouve dans la même position où je trouve 0 de chaine de première ligne dans les chaines des autres lignes.
Cette solution este théorique. Imaginez si nous avons un fichier volumineux.De plus la perte de curseur et de position.
 
 
SVP, j'ai besoin de vos aides.

Reply

Marsh Posté le 04-07-2009 à 20:39:36   

Reply

Marsh Posté le 04-07-2009 à 23:47:08    

T'es obligé de traiter 2 fois ton fichier. La première fois pour vérifier si tous les chiffres d'une position sont identiques puis la seconde fois pour supprimer ledit chiffre.
 
De plus, on ne fait pas de lecture/écriture sur le même fichier car dangereux.
 
Donc la solution est de
1) faire une première lecture. Cette lecture servira à marquer tous les chiffres identiques d'une même position.  
2) tu fais une seconde lecture où tu copies chaque ligne dans un second fichier en enlevant les chiffres identifiés comme identiques
3) tu effaces l'ancien et renommes le nouveau fichier


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-07-2009 à 08:39:51    

Salut,  
1)  
je voudrais supprimer la colonne qui contient 0: supprimer des chaines les 0 de même position ?
 
Dans la première lecture, pourquoi on marque tous les chiffres identiques d'une même position ?
 
J'ai trouvé une difficulté de gérer la position de curseur et la manière de supprimer ces 0. est ce que ceci avec décalage?
 

Reply

Marsh Posté le 05-07-2009 à 21:24:44    

msedirim a écrit :

Salut,  
1)  
je voudrais supprimer la colonne qui contient 0: supprimer des chaines les 0 de même position ?
 
Dans la première lecture, pourquoi on marque tous les chiffres identiques d'une même position ?
 
J'ai trouvé une difficulté de gérer la position de curseur et la manière de supprimer ces 0. est ce que ceci avec décalage?
 


 
Houla, je crois qu'il y a incompréhension de part et d'autre.
 
Moi j'ai compris que ton problème était de supprimer, pour chaque ligne, les chiffres identiques sur une même position comme le montre ton exemple
1    11100
2    10101
3    01001
4    10001
Et donc c'est parce que le chiffre de la 4° position est le même sur toutes les lignes qu'on peut le supprimer.
 
Si c'est bien ça, t'es obligé, avant de supprimer ce 4° chiffre, de vérifier d'abord qu'il est identique sur toutes les lignes donc de faire une première lecture de ton fichier.
Et donc pendant cette lecture, autant en profiter pour marquer toutes les positions identiques. C'est pas compliqué. Tu définis un tableau de positions que tu mets toutes à 1. Puis à chaque ligne lue, tu compares la ligne avec la ligne précédente. Et pour chaque position qui diffère tu mets l'élément de ton tableau à 0.
En fin de fichier, les éléments de ton tableau encore à 1 indiqueront les positions des caractères identiques pour toutes les lignes. De là, il deviendra très facile de générer un 2° fichier où ces caractères auront été supprimés de leurs lignes...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 06-07-2009 à 12:01:05    

Sve@r a écrit :

T'es obligé de traiter 2 fois ton fichier.


 
Certainement pas. On ne lit jamais 2 fois un même fichier (règle d'or depuis la nuit des temps !)
Surtout avec des fichiers > 2Go, tu fais ça en Prod dans une banque, tu es viré sur le champ.
On lit en mémoire et on parse.  
C'est tout.

Reply

Marsh Posté le 06-07-2009 à 19:58:55    

Salut,
 
Pat333, pouvez-vous détailler votre solution ?

Reply

Marsh Posté le 06-07-2009 à 20:38:45    

Pat333 a écrit :

Certainement pas. On ne lit jamais 2 fois un même fichier (règle d'or depuis la nuit des temps !)
Surtout avec des fichiers > 2Go, tu fais ça en Prod dans une banque, tu es viré sur le champ.
On lit en mémoire et on parse.  
C'est tout.


 [:prozac] T'en a pas marre de jouer les fachos ? Tu vois, moi je travaille dans l'imprimerie, si tu t'amuses à un lire de plus de 2Go en RAM, tu passes vraiment pour un guignol.

Reply

Marsh Posté le 11-07-2009 à 16:37:53    

Pat333 a écrit :

 

Certainement pas. On ne lit jamais 2 fois un même fichier (règle d'or depuis la nuit des temps !)
Surtout avec des fichiers > 2Go, tu fais ça en Prod dans une banque, tu es viré sur le champ.
On lit en mémoire et on parse.
C'est tout.


Pat333 = Stephen135 et de nombreux autres pseudos. Facilement reconnaissables à la constance du propos...


Message édité par Emmanuel Delahaye le 11-07-2009 à 16:38:13

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-07-2009 à 20:10:13    

Pat333 a écrit :


 
Certainement pas. On ne lit jamais 2 fois un même fichier (règle d'or depuis la nuit des temps !)
Surtout avec des fichiers > 2Go, tu fais ça en Prod dans une banque, tu es viré sur le champ.
On lit en mémoire et on parse.  
C'est tout.


 
Mince. J'ai pas encore été viré.  [:eraser17]

Reply

Marsh Posté le 12-07-2009 à 23:12:58    

msedirim a écrit :

Pat333, pouvez-vous détailler votre solution ?


Non il peut pas vu qu'il a ouvert grand sa bouche sans réfléchir.
 

Pat333 a écrit :

Certainement pas. On ne lit jamais 2 fois un même fichier (règle d'or depuis la nuit des temps !)
...
On lit en mémoire et on parse.  
C'est tout.


 
Si tu lis bien mes propos, j'ai écrit "traiter" pas lire donc ce traitement peut très bien être fait depuis la mémoire (bien que je n'aie pas peur d'avouer que je pensais quand-même à un traitement fait depuis le disque dur). Toutefois que ce soit depuis la mémoire ou depuis le disque dur, le traitement (ce que toi tu appelles "parser" ) sera malgré tout fait 2 fois.
 

Pat333 a écrit :

tu fais ça en Prod dans une banque, tu es viré sur le champ.


Chaque problème entraine une solution différente. Dans une banque, t'as rarement besoin de vérifier l'intégralité d'un fichier avant de traiter ses infos. Mais bon, je ne vois même pas pourquoi j'essaye de t'instruire vu la réputation que tu sembles avoir au vu des nombreux autres avis qui ont ponctué ton pauvre post.


Message édité par Sve@r le 12-07-2009 à 23:44:36

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed