REGEX et fichier plat

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : REGEX et fichier plat

Re: REGEX et fichier plat

par skap » 21 févr. 2014, 14:21

Salut,

est-ce que ceci fonctionne? (pas propre mais ça permets d'y voir mieux!)
$contenu = file_get_contents(fichier);
$tableauDeLignes = explode("\n",$contenu);
foreach($tableauDeLignes as $l)
{
   if(!strstr($l,"#")
     echo $l."<br />";
}

Re: REGEX et fichier plat

par sirakawa » 16 févr. 2014, 21:34

Que signifienexactement pour vtoi ton expression régulière:
preg_match("/(^#en_tete1).*(#en_tete2$)/sm", $ligne))
formulé en clair en remplaçant les ? par leur traduction
je cherche si la ligne commence par "?",
se continue avec "?"
se termine avec "?"

Une ligne peut-elle avoirb cette structure?

Voici un test qui me semble limpide:
<?PHP

$existe=false;
define('fichier', 'test.txt');
@$fv = fopen(fichier, 'r') or die('Ouverture en lecture de "' . fichier . '" impossible !');      
//à quoi sert existe s'il ne change jamais?   
while (!feof($fv) && !$existe)
{
	$ligne = fgets($fv, 1024);
$res = preg_match("/(^#en_tete1).*(#en_tete2$)/sm", $ligne, $matches);
print "<br>$res  $ligne";
var_dump($matches);
}
fclose($fv);
?>
En fait, il suffit de tester si le premier caractère de la ligne est un # et de sauvegarder dans une variable jusqu'à ce qu'on en trouve un autre où on sauvegarde dans une autre variable

Re: REGEX et fichier plat

par jojolapine » 16 févr. 2014, 19:43

Bonjour,

Un simple echo ne suffira pas pour afficher le contenu entre les entêtes.
En effet le variable $ligne contient un tableau si il y a des résultats.
Autre point, tu ne captures pas ce qu'il y a entre les entêtes.

Il faudrait donc modifier ta gexe pour celle-ci : http://lumadis.be/regex/test_regex.php?id=2085

et utiliser print_r ou var_dump pour vérifier le contenu de $ligne.

Bon courage !

REGEX et fichier plat

par osiris73 » 14 févr. 2014, 23:26

Bonsoir à tous,

J'ai un fichier plat en txt qui contient ceci:

contenu du fichier test.txt:

#en_tete1
ligne1
ligne2
ligne3
#en_tete2
ligne4
ligne5
ligne6
#en_tete3
ligne7
....
....
etc...



Je voudrais à l'aide d'une regex recuperer le contenu entre l'en_tete1 et l'en_tete2
dans mon exemple afficher a l'ecran :
ligne1
ligne2
ligne3

voici le code que j'utilise

Code : Tout sélectionner

$existe=false; define('fichier', 'repertoire/test.txt'); @$fv = fopen(fichier, 'r') or die('Ouverture en lecture de "' . fichier . '" impossible !'); while (!feof($fv) && !$existe) { $ligne = fgets($fv, 1024); if (preg_match("/(^#en_tete1).*(#en_tete2$)/sm", $ligne)) { echo $ligne; } } fclose($fv);
en fait il ne match et donc ne m'affiche rien à l'ecran

Merci de votre aide et de m'aiguiller sur la réponse

Bonne fin de soirée