cs_sbouli
Messages postés8Date d'inscriptionlundi 22 décembre 2003StatutMembreDernière intervention22 octobre 2007
-
22 oct. 2007 à 17:18
bernie666
Messages postés427Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention29 janvier 2008
-
23 oct. 2007 à 09:37
Bonjour,
Je suis débutant en C#, je souhaite utiliser ce language pour parser mes fichiers de log, le principe est simple, je lis un gros fichier texte ligne par ligne, si la ligne répond à certains critères, je l'écris dans un fichier précis.
par exemple :
ligne1 : vas dans fichier1
ligne2 : vas dans fichier2
ligne3 : vas dans fichier2
ligne4 : vas dans fichier1
ligne5 : vas dans fichier2
Je ne sais pas à l'avance combien de fichiers seront créés.
Principe :
boucle tant que fichier de log pas fini {
lit ligne;
si ligne contient fichier je récupère le numéro
j'écris dans le fichier #numéro# (ouverture/création selon l'état du fichier)
}
je ferme tout les fichiers créés
je ferme le fichier de log.
Pour le moment je boucle sans problème, par contre lorsque je dois écrire la ligne, je ne vois pas comment ouvrir (voir créer) le bon fichier et surtout ne pas refermé après chaque écriture mais bien en fin de traitement ...
Si je pouvais avoir des nom de variables dynamique, le problème serait réglé avec :
Si le stream n'existe pas encore :
if (! liste_status.Contains(status))
{
FileStream fstmp#icilenomdynamique# = new FileStream(cheminDest + nomDuFichierSource + "_" + status + extensionDuFichierSource, FileMode.Create);
StreamWriter swdest#icilenomdynamique# = new StreamWriter(fstmp#icilenomdynamique# );
liste_status.Add(status);
}
Je ne sais pas si je suis suffisament claire, n'hésitez pas à demander un complément d'information ....
bidou_01
Messages postés134Date d'inscriptiondimanche 1 octobre 2006StatutMembreDernière intervention19 mai 20081 22 oct. 2007 à 18:59
Bonsoir,
Hum, si j'ai bien compris, pour chaque critère, tu écrit dans un fichier ?
Si c'est le cas, pourquoi ne pas stocker un Dictionnaire (Dictionnary<Key,Value>) dans lequel tu stock tous tes critères avec un nom comme clé, et le critère en question comme valeur.
Comme ca tu peux créer pour chaque critère un FileStream fs_cle_critere et un StreamWriter sw_cle_critere.
A partir de là tu pourra tester l'existance de ces 2 objets pour chacun de tes critère...
Sinon tu peux passer par une structure pourquoi pas :
Critere monCritere1 = new Critere();
monCritere1.critere = "blabla";
monCritere1.filename = "path vers le fichier";
monCritere1.fs = new FileStream(filename);
monCritere1.ws = new StreamWriter(monCritere1.fs);
Après tu peux même pousser le vice en stockant tes critères dans une liste générique de Critere...
Je ne sais pas si ce sont les solutions les plus optimales, mais je pense que ça peut marcher.
Je n'ai pas tester le code que j'ai écrit, mais un truc du genre doit être possible.