Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2007, 16h32   #1
Membre éprouvé
 
Avatar de sroux
 
Homme Sébastien Roux
Expert SI Finance
Inscription : avril 2003
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Roux
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Expert SI Finance
Secteur : Santé

Informations forums :
Inscription : avril 2003
Messages : 140
Points : 402
Points : 402
Envoyer un message via Skype™ à sroux
Par défaut Lecture de fichier : conversion d'un script perl en php

Bonjour,

Je suis en train d'adapter un bout de code réalisé en PERL vers du PHP.

L'idée et de parcourir un fichier (logs).
Dès que je trouve une ligne d'intérêt (preg_match) je souhaiterais récupérer alors la ligne suivante...
J'ai un problème quant au comportement de la fonction while.

C'est simple en PERL:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
// Parcours du fichier
while (<MONFICHIER>) {
  // Si regex match
  if (/.../) {
     // J'affiche la ligne d'intérêt
     print ligne1\n;
     // Je parcours le reste du fichier jusqu'à la ligne suivante (inclue)
     while (<MONFICHIER>) {
        print ligne2;
        last; //on sort du 2° while
     }
  }
}
Ca me semble également simple en PHP mais cela ne fonctionne pas...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$monfichier = fopen("...", "r") ; // ouverture en lecture
 
while ( !feof($monfichier) ) {
	$ligne = fgets($monfichier);
 
	if(preg_match('/^\[(Mon|Tue|Wed|Thu|Fri|Sat|Sun)/i', $ligne)) {
		print $ligne;
 
		while (!feof($monfichier)):
			$ligne2 = fgets($monfichier);
			print $ligne2;
			endwhile;	
	}
}
fclose ($monfichier) ;
 
?>
Merci d'avance.

SR
sroux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 16h37   #2
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
Salut pourquoi tu refais une deuxieme boucle si tu souhaite uniquement la ligne du dessous tu peux essayer quelque chose comme
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
$monfichier = fopen("...", "r") ; // ouverture en lecture
 
while ( !feof($monfichier) ) {
	$ligne = fgets($monfichier);
 	if(preg_match('/^\[(Mon|Tue|Wed|Thu|Fri|Sat|Sun)/i', $ligne)) {
		print $ligne;
		$ligne2 = fgets($monfichier);
		print $ligne2;
	}
}
fclose ($monfichier) ;
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 16h42   #3
Membre éprouvé
 
Avatar de sroux
 
Homme Sébastien Roux
Expert SI Finance
Inscription : avril 2003
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Roux
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Expert SI Finance
Secteur : Santé

Informations forums :
Inscription : avril 2003
Messages : 140
Points : 402
Points : 402
Envoyer un message via Skype™ à sroux
Yeahh... trop bon!

En effet c'est la solution. Mais il fallait vraiment le savoir!

Merci et bon we

SR
sroux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h03.


 
 
 
 
Partenaires

Hébergement Web