recherche de chaine

Eléphant du PHP | 180 Messages

01 mai 2007, 12:24

Bonjour

mon problème est de rechercher une chaine qui parfois est sur la même ligne entièrement et des fois le début sur une et la fin sur la suivant.

Mon code me ramène bien le premier cas mais forcément pour le deuxième cas juste le début . Comment faire ???

ex
le 20/04
/2007 4:30:45
moi je ne récupère que 20/04 et non 20/04/2007

Eléphant du PHP | 451 Messages

01 mai 2007, 12:43

Ben si tu es sur que ça ne tient jamais sur plus de 2 lignes pourquoi ne pas concaténer les lignes avant de faire le test ?

Imaginons que ce soit un fichier :

1) lire la permière ligne dans ligneA
puis une boucle j'usqu'à la fin de fichier ou que l'on ait trouvé (je ne sais pas ce que tu veux faire)
2) lire la ligne suivante dnas ligneB
3) concaténer ligneA et ligneB dans concatAB
4) faire le test sur concatAB
5) passer ligneB dans ligneA
Revenir à 2) tant que la boucle n'est pas terminée
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 180 Messages

01 mai 2007, 13:15

j'ai un fichier ou ligne sont du type

debut generation *********************** - le 20/04/2007 4:0:0
fin generation ************************* - le 20/04/2007
4:30:45

ou parfois

debut generation ******* - le 20/04/2007 4:0:0
fin generation ******* - le 20/04/2007 4:30:45


je fais un

foreach ($Log as $ligne)

mais je ne vois pas comment faire à part verifier le strlen mais parfois par exemple pour l'heure 4:0:0 ou 4:30:45

Eléphant du PHP | 180 Messages

01 mai 2007, 19:16

je pense que pour palier à mon pb c'est que mon fichier texte se retrouve sous forme d'une seule et même ligne mais comment faire pour effacer les retours à la ligne avec str_replace

Eléphant du PHP | 451 Messages

01 mai 2007, 19:45

Essaye plustôt trim() ;)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mai 2007, 08:30

Dans l'idéal, ce qu'il te faudrait c'est recomposer tes véritables lignes (d'autant que ca peut servir pour d'autres choses). Tu peux par exemple tester le début de chaque ligne et voir s'il commence par "debut generation" ou "fin generation"...
$realLog = array();
foreach ($Log as $ligne) {
  if (ereg("^debut", $ligne) || ereg("^fin", $ligne) ) // si la ligne commence par "debut" ou "fin"
    $realLog[] = trim($ligne); // on créer une nouvelle ligne dans la tableau
  else 
    $realLog[(count($realLog) - 1)].= trim($ligne); // sinon on complète la ligne précédente
}

// pour voir le résultat 
echo '<pre>';
print_r($realLog);
echo '</pre>';
A tester :)

ca fait quelques manipulations en plus, mais au final ton tableau devrait contenir une ligne entière de log par ligne.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 180 Messages

02 mai 2007, 10:16

La dernière solution au final me donne presque la même chose que le trim ou le str_replace le problème reste entier . Pour la dernière comme pour les autres cela donne

ex
[6] => debut generation ******** - le 05/02/2007 4:0:0
[7] => fin generation ******* - le 05
[8] => /02/2007 5:12:56
il ne me complète pas la ligne.

J'ai eu beau enlever \n \r j'ai l'impression qu'il ne me génère pas le fichier de depart sur une seule et même ligne pour palier à cela.

foreach ($Log as $ligne)
    	{
    						
               $ligne= trim($ligne,"\n");
               $ligne = trim($ligne,"\*");
               $ligne= trim($ligne,"\r"); 
    	   echo $ligne;
             }