Bonjour
j'aurai besoin de votre aide pour réaliser une sorte de "cleaner".
(quand j'entend "besoin de votre aide pour réaliser", c'est plus d'une méthodologie que j'ai besoin je n'attend pas du tout du code tout pret)
je vais essayer de vous expliquer clairement ce que j'entend par cleaner, et le début de la routine que je souhaite mettre en place pour la réaliser.
Alors :
J'ai un fichier texte. Ce fichier contient des informations diverses et variées.
Il contient également certaines informations qui peuvent apparaitre en double dans le fichier.
J'entends par notion de double la chose suivante :
j'ai le bloc d'informations suivant :
createElement ToTo -n "monToto1";
setVal ".d" -type "float" 1 0 0;
setVal ".hi" -type "float" 1 0 1;
setVal ".uk" -type "float" 1 1 0;
ce bloc commence donc par createElement ToTo et se finira à la fin de la ligne précédent le futur createElement.
quelque part ailleurs dans mon fichier je peux avoir :
createElement ToTo -n "monToto2";
setVal ".d" -type "float" 1 0 0;
setVal ".hi" -type "float" 1 0 1;
setVal ".uk" -type "float" 1 1 0;
ces deux blocs n'ayant pas le même nom, ils seront considérés unique.
Le but de ce cleaner est justement de reconsidéré la phrase plus haut et de dire
si dans mon fichier, j'ai deux bloc différents ayant les même attributs alors je réécrirai mon fichier avec un seul bloc
Chose importante également, pour un futur développement je dois conserver le nom du bloc : -n "monToto1", car plus tard je serai obligé de refaire une passe sur le fichier, pour rechercher si je n'ai pas d'autre occurence de ce nom : quelque chose de ce genre :
createAttach attach -o "monToto1";
setAtt ".b" -type "file" "c:\toto\ex.tif";
car cette attache faisant partie du bloc, je ne dois merger deux blocs en un que s'ils sont rigoureusement identiques
par ex si j'ai deux blocs identiques au niveau des attributs, mais que un dispose d'une attache comme ci dessous et l'autre non, alors ces deux blocs restent uniques (là ça commence à devenir casse tete :o)
ça c'est l'explication fonctionnelle
maintenant techniquement j'éprouve quelques difficultés
l'idée que j'avais est la suivante
je récupère le fichier à cleaner et le passe en parametre d'un streamReader
je boucle tant que mon streamreader.readline() renvoie !null
je teste ma ligne courante voir si elle contient createElement ToTo
si oui je dois ajouter cette ligne plus toutes les lignes d'en dessous tant que je ne rencontre pas de nouveau createElement => dans une sorte de buffer facile à manipuler (List<string>)
etc etc
maintenant, est ce que je dois créer une liste pour chaque bloc et essayer de comparer (comment ?) ces listes ?
L'idée suivante étant de reparcourir mon stream depuis le début (y a t'il une méthode pour revenir au début d'un stream ?) et de rechercher pour chaque bloc si j'ai une autre occurence du nom du bloc associé à la balise createAttach
L'idée finale serait donc de flaguer les endroits "identiques" fonctionnellement, pour ensuite réécrire un fichier ayant le même contenu à la différence près que les blocs identiques soient "mergés".
En espérant que ce ne soit pas trop complexe.
Je suis disponible pour toute question bien entendu
Par avance un grand merci pour votre aide![]()
Partager