Lire, Selectionner, Ecrire un fichier *.txt

[Résolu]
Signaler
Messages postés
11
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
3 février 2006
-
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
-
Bonjour,



J'ai des fichier log dans un répertoire (408Mo pour 1322 Fichiers)



De ces fichers je voudais sortir que certaines lignes comme :



TOST: TOST Protect: Ident: Blade-V - BLADINOU:to263713 - 84.119.**.***

TOST: TOST Protect: Ident: AnAkin.(V)oche - UNICORNID54209:to541076715 - 82.228.**.***

TOST: TOST Protect: Ident: goodise - 57A895C3E1B84F0:to4849777 - 82.216.**.***



Puit enfin je voudrais crée un seul fichier contenant C lignes en suppriment quelques infos qui donnerait ca : :



Blade-V - BLADINOU:to263713 - 84.119.**.***

AnAkin.(V)oche - UNICORNID54209:to541076715 - 82.228.**.***

goodise - 57A895C3E1B84F0:to4849777 - 82.216.**.***



Le tout en PHP



Es-que cela est possible ? Ci oui comment ?



Ou il a t-il une autre solution pour faire cela ?





Merci

8 réponses

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Tu trouveras tout sur ce site...
http://fr2.php.net/manual/fr/function.fwrite.php

A+ il est l'heure de partir pour moi...
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Salut,

Tout est possible en PHP ;)

Mais par contre, tu vas être obligé de lire les fichiers ligne par ligne pour en sortir les info... 408Mo, ça risque d'être long !

DONC :

1. Ca va être long :
set_time_limit(0); // !!!!! DANGER boucle infinie... prudence !!!!!!

2. 408 Mo / 1322 = 300ko par fichier... on peut donc le charger en mémoire :
$logs = file('fichier.log'); // array(lignes du fichier);

3. pour chaque ligne => comparaison avec une RegExp (Tu connais?)

list($k,$l) = each($logs);

if( preg_match('@^TOST:[ ]+TOST:[ ]+Protect:[ ]+Ident:[ ]+(.+)$@',$l,$res) ) {
echo $res[1]; // devrait être ce que tu cherches...
}
Messages postés
4
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 février 2006

C 'est quoi exactement le RegExp, ca :

if( preg_match('@^TOST:[ ]+TOST:[ ]+Protect:[ ]+Ident:[ ]+(.+)$@',$l,$res) ) {

echo $res[1]; // devrait être ce que tu cherches...

je comprend

mais ca je comprend pas non plus: list($k,$l) = each($logs);
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Salut...

Alors, pour répondre à tes questions :

La RegExp c'est : ^TOST:[ ]+TOST:[ ]+Protect:[ ]+Ident:[ ]+(.+)$
Mais j'aurais du ecrire : ^TOST: +TOST: +Protect: +Ident: +(\S.*)$
Elle veut dire :
'^' début de chaine
'TOST:' trouver "TOST:"
' +' puis au moins un espace
re 'TOST:' et au moins un espace
puis 'Protect:' et au moins un espace
puis 'Ident:' et au moins un espace
'(' capturer se qui suit
'\S' pas un caractère blanc
'.*' n'importe quoi 0, 1 ou plusieur fois
')' fin de la capture
'$' fin de la chaine

Les RegExps sont relativement compliquées à aborder... Même quand on les connais un peu! Je te renvoi vers des tutoriaux et exemples.

Ensuite,

each

each --
Retourne chaque paire clé/valeur d'un tableau


Description
array each ( array &array )


each() retourne la paire clé/valeur courante
du tableau <var>array</var> et avance le pointeur de tableau.
Cette paire est retournée dans un tableau de 4 éléments,
avec les clés <var>0</var>, <var>1</var>,
<var>key</var>, et <var>value</var>. Les
éléments <var>0</var> et <var>key</var>
contiennent le nom de la clé et <var>1</var> et
<var>value</var> contiennent la valeur.



Si le pointeur interne de tableau est au-delà de la fin du tableau,
each() retourne <tt>FALSE</tt>.


C'est censé être plus rapide que foreach qui copie le tableau avant de travailler dessus...

list() est là pour reccueillir le résultat de each()

Voili voilou

Mais est-ce que ça marche au moins ?
Messages postés
4
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 février 2006

La page s'exécute sans problème, mais elle ne me retourne rien, il y a rien a l'affichage.
Messages postés
4
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 février 2006

Mais est-ce k'il y a possibilité de l'enregistré dans un autre fichier texte plutot que de l'afficher.
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
oui
Messages postés
4
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 février 2006

c'st quoi le nom de la fonction qui permet ca. s'il te plait