- 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 :
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
cs_TeniX
Messages postés118Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention11 décembre 20112 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.
cs_MoH008
Messages postés238Date d'inscriptionlundi 2 mars 2009StatutMembreDernière intervention29 septembre 20111 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 !!
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 20115 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.
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 20115 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:
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) :
cs_MoH008
Messages postés238Date d'inscriptionlundi 2 mars 2009StatutMembreDernière intervention29 septembre 20111 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 !!
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 20115 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.