Bonjour tout le monde,
baby developpeur en C# (meme pas junior) j'ai fait une application qui permet de lire des traces stock�es dans un fichier texte.
Les traces ont pour la plupart la forme suivante :
Info1�Info2�info3�... jusque 9
Chaque message de trace cntient les 9 champs.
Pour cel� j'utilise un streamreader, je lis la ligne et la "split" en fonction du s�parateur.
Pas trop de soucis jusqu'� ce que j'ai des traces d'erreur du genre :
Error£20070207112845500£IHM£frmMain.Main£User£Computer£Erreur dans MAIN : Erreur DB Source : Outil Stack : �* Outil.Trt_Erreur.Trt_SqlErreur(SqlException e, SqlTransaction myTransaction, Int32& retryHarder) dans D:\Mes Documents\Application\Outil\Trt_Erreur.cs:ligne 36
�* System.Windows.Forms.Control.OnClick(EventArgs e)
�* System.Windows.Forms.Button.OnClick(EventArgs e)
�* System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
... (et ca continue comme ca pendant plusieurs lignes comme vous pouvez vous en douter).
Le probl�me avec ces messages c'est que chaque "� System. .... " constitue une ligne � part enti�re et donc quand je lis la ligne avec le streamreader, il ne prend pas toute la trace mais une partie de la trace, puis chaque ligne d'erreur puis finalement la fin de la trace.
Donc dans mon exemple j'aurai :
1 ligne avec Error£20070207112845500 ... jusque ligne 36. Cette ligne sera splitt�e en 7
Puis 1 ligne pour chaque "� System. .... " qui elle ne sera pas splitt�e car le s�parateur n'est pas pr�sent
puis finalement une ligne pour la fin de la trace qui elle contient 3 autres champs.
Ceci, je l'ai r�solu par un switch/case sur le nombre de partie trouv�es.
Jusque l� ca fonctionne. Le probl�me c'est que ca prend souvent longtemps pour charger de gros fichiers de trace.
voici le code que j'utilise pour lire le fichier et charger le datagrid :
en plus de cela j'ai un event qui regarde le "selection change" du datagrid et qui affiche le contenu d'une des colonne dans une textbox (ce qui permet de visualiser le message � porprement parler)
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 try { // StreamReader pour la lecture du fichier StreamReader SR = new StreamReader(fichier); string Ligne = SR.ReadLine(); string[] LigneSeparee; // Lecture de toutes les lignes while (Ligne != null) { LigneSeparee = Ligne.Split(new char[] { '£' }); switch (LigneSeparee.Length) { // cas normal case 9: { string date = LigneSeparee[1].ToString(); date = date.Substring(0, 4) + "/" + date.Substring(4, 2) + "/" + date.Substring(6, 2) + " " + date.Substring(8, 2) + ":" + date.Substring(10, 2) + ":" + date.Substring(12, 2) + " " + date.Substring(14); LigneSeparee[1] = date; object[] Donnees = new object[10]; Donnees[0] = NomDuFichier; for (int i = 1; i < Donnees.Length; i++) { Donnees[i] = LigneSeparee[i - 1]; } Messages.Tables[0].Rows.Add(Donnees); } break; // si pas cas normal alors il faut prendre la trace en plusieur fois case 7: { string date = LigneSeparee[1].ToString(); date = date.Substring(0, 4) + "/" + date.Substring(4, 2) + "/" + date.Substring(6, 2) + " " + date.Substring(8, 2) + ":" + date.Substring(10, 2) + ":" + date.Substring(12, 2) + " " + date.Substring(14); LigneSeparee[1] = date; DonneesTemporaires = new object[10]; DonneesTemporaires[0] = NomDuFichier; for (int i = 1; i < 8; i++) { DonneesTemporaires[i] = LigneSeparee[i - 1]; } } break; case 1: { string SuiteErreur = LigneSeparee[0]; string Erreur = DonneesTemporaires[7].ToString() + "\n " + SuiteErreur; DonneesTemporaires[7] = Erreur; } break; case 3: { string SuiteErreur = LigneSeparee[0]; string Erreur = DonneesTemporaires[7].ToString() + "\\n" + SuiteErreur; DonneesTemporaires[7] = Erreur; DonneesTemporaires[8] = LigneSeparee[1]; DonneesTemporaires[9] = LigneSeparee[2]; Messages.Tables[0].Rows.Add(DonneesTemporaires); } break; } Ligne = SR.ReadLine(); } SR.Close(); }
J'initialise l'event sur l'�v�nement OnLoad de le la forme.
quelqu'un peut me dire comment optimiser le code ?
Merci d'avance




R�pondre avec citation

