metalimad
Messages postés9Date d'inscriptionsamedi 1 février 2003StatutMembreDernière intervention19 janvier 2006
-
12 déc. 2005 à 15:56
metalimad
Messages postés9Date d'inscriptionsamedi 1 février 2003StatutMembreDernière intervention19 janvier 2006
-
13 déc. 2005 à 16:31
Salut,
J'essaie de lire des fichiers de logs de plusieurs Mo (pouvant atteindre 1 ou 2 Go), repérer les blocs lignes qui m'intéressent et les copier dans une appli de monitoring comme ceci:
les lignes qui m'intéressent étant celles qui contiennent les var (elles commencent toutes par des chiffres mais il se peut que les autres lignes blablabla le soient aussi, donc pas de s.startwith(un chiffre)).
bref, je veux récupérer en une seule lecture chaque bloc de la ligne "intéressante" et du commentaire qui est juste en dessous, exemple
ce que je fais pour l'instant est parcourir mon fichier de log ligne par ligne
(s = sr.readline () )
je vérifie si la ligne courante est la ligne qui m'interesse (ou le début du bloc) je stocke son numéro de ligne (1ère, 4ème ou ième ligne dans le fichier texte), dans cet exemple ci dessus le numéro serait 2 (2ème ligne).
je parcours les lignes suivantes jusqu'à ce que je trouve la prochaine ligne intéressante (début du bloc suivant) et je récupère le numéro pareil (ici 7).
donc mon bloc commence de la 2ème jusqu'à la 7ème ligne.
c'est la que je fais appel à une fonction externe
Traitement(Debutbloc (ici 2), Fin bloc (7), Fichier)
et je reparcours les lignes de 2 à 7 pour faire mon traitement.
les problèmes qui se posent sont les suivants:
- cette méthode quoique efficace reste un peu lente ... voire très lente des fois
- il est évident que je ne peux pas passer TOUT mon fichier de log en variable avec ReadToend, car il fait des Go, donc ce qui m'oblige à reparcourir ligne par ligne dans ma fonction (traitement)
- Comment accéder directement à la ième ligne dans un fichier sans faire appel à ReadLine qui est assez couteux?
- ici je répère mon bloc par des numéros de lignes, or j'ai remarqué que je peux le faire avec le numéro de char (char début, char fin), est ce que c'est plus rapide? et si c'est le cas comment accéder directement dans un gros fichier au bloc entre le numéro de char x et le numéro de char y? (je pense qu'il y a streamfile.read(char[] buffer, int, int), mais elle me génère qq erreurs!)