Lire, Selectionner, Ecrire un fichier *.txt

Résolu
gidzit Messages postés 11 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 3 février 2006 - 3 févr. 2006 à 09:21
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 - 3 févr. 2006 à 17:56
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

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

A+ il est l'heure de partir pour moi...
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
3 févr. 2006 à 09:44
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...
}
0
ben127 Messages postés 4 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 février 2006
3 févr. 2006 à 17:02
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);
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
3 févr. 2006 à 17:28
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ben127 Messages postés 4 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 février 2006
3 févr. 2006 à 17:49
La page s'exécute sans problème, mais elle ne me retourne rien, il y a rien a l'affichage.
0
ben127 Messages postés 4 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 février 2006
3 févr. 2006 à 17:49
Mais est-ce k'il y a possibilité de l'enregistré dans un autre fichier texte plutot que de l'afficher.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
3 févr. 2006 à 17:51
oui
0
ben127 Messages postés 4 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 février 2006
3 févr. 2006 à 17:52
c'st quoi le nom de la fonction qui permet ca. s'il te plait
0