Aide traitement du fichier

boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 - 17 juil. 2009 à 14:43
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 - 19 juil. 2009 à 00:33
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 caractère "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édemment.
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.


- 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.

6 réponses

cs_TeniX Messages postés 118 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 11 décembre 2011 2
17 juil. 2009 à 21:51
Slt, as tu déjà commencé quelque chose ?
Sinon peux stockés ton fichier dans un tableau ou autre pour pouvoir faire ton traitement et ensuite le réécrire.

Ciao
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
17 juil. 2009 à 22:50
Salut,
Comme TeniX te l'a conseillé si ton fichier n'est pas trop lourd tu peux utiliser un tableau statique ou dynamique (au choix) pour pouvoir effectuer tes traitements. C'est ce que je pense est le plus adéquate dans ta situation.

The possible meet the impossible to become the possimpible !!
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
18 juil. 2009 à 08:13
Salut,

J'ai un fichier de taille grande.
Il comporte des milliers des lignes.
Si j'utilise une structure des données en mémoire comme tableau ou matrice alors ceci va être couteux. De plus, je crois que la taille de matrice est limitée.

S'il vous plait, Avez-vous une proposition ?
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
18 juil. 2009 à 09:01
Salut,

Je reformule ma demande.
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
18 juil. 2009 à 20:01
Salut,
- 1er traitement :
tu lis ton fichier essais.txt et dans un fichier temporaire tu ne réécris
que les lignes différentes de "00000". Ton fichier temporaire sera épuré des lignes "inutiles" et devrait être moins lourd déjà (espérons beaucoup moins lourd ).

- 2e traitement :
* tu as toujours l'utilisation du tableau qui reste la méthode la plus facile (je pense) même si elle peut s'avérer couteuse.
* ta solution théorique n'est pas mauvaise. pour le déplacement du descripteur du fichier par contre, tu devras être habile! ce liencontient des fonctions qui te seront utiles jète y un oeil

The possible meet the impossible to become the possimpible !!
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
19 juil. 2009 à 00:33
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.
0
Rejoignez-nous