Demande d'aide sur la recherche d'une date dans un texte

dioudiallo Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
codeurh24 Messages postés 760 Date d'inscription   Statut Membre Dernière intervention   -
bonjours je suis nouveau dans ce forum et j'avais un probleme dans mon projet.
en effet j'essai de creer un programme en php qui va me permettre de rechercher des dates dans un fichier.text.
donc une fois une date trouver on l'affiche et on affiche aussi les lignes suivent la date jusqu'a la prochaine date trouvé. et le programme devrais effectuer le meme processus pour tous les dates trouves.
les dates sont au format jour mois heure minute seconde année.
le probleme c'est que je connais pas de fonction pour rechercher une date dans un fichier texte.
et merci d'avance.

4 réponses

Utilisateur anonyme
 
Bonjour

il existe un outil repris dans de nombreux langages, permettant des recherches poussées dans du texte: les expressions régulières ou Regex.

Je ne fais pas de PHP, mais très vite j'ai trouvé
https://www.commentcamarche.net/contents/803-php-expressions-regulieres


0
Utilisateur anonyme
 
Un truc qui n'est pas expliqué dans cet article (et du coup je ne savais pas si cela était valable en PHP, mais ici http://www.phpliveregex.com, ils en parlent), c'est la double utilité des parenthèses.

Comme en math, elles permettent de "factoriser" une clause, par exemple, je cherche trois séquences d'une lettre et d'un chiffre
je peux dire "1lettre1chiffre1lettre1chiffre1lettre1chiffre" :
[:alpha:][:digit:][:alpha:][:digit:][:alpha:][:digit:]
ou alors dire (1lettre1chiffre)3 fois :
([:alpha:][:digit:]){3}

Mais en même temps, tout ce qui est entre un jeu de () est capturé et peut être récupéré dans le code, donc dans l'exemple ci dessus je pourrai obtenir en résultat de la regex les 3 séquences
0
dioudiallo
 
dakor je vais essayer de voir avec les expressions reguliere.
merci pour votre aide
0
Xavierdu34 Messages postés 216 Date d'inscription   Statut Membre Dernière intervention   21
 
Bonjour,

Donne nous un exemple concret du format de la date, on pourra ainsi t'aiguiller sur la Regex adaptée.

Cdlt.
0
dioudiallo
 
dakor la date c'est du genre: Mon Apr 18 16:05:16 2016.
comme les date d'un fichier log
0
codeurh24 Messages postés 760 Date d'inscription   Statut Membre Dernière intervention   123
 
Salut, je trouve que c'est pas très clair ta demande.

Je fourni une possible solution sans expression régulière.
En attendant d'autre meilleurs réponses.



<?php

if( !isset($_GET['typeRechercheET']) )
{
$_GET['typeRechercheET'] = 'off';
}
// recupere le fichier log si il existe
$fileTxt = @file_get_contents('texte.log');

// si le fichier log n'existe pas on creer un texte d'exmeple
if( strlen($fileTxt) < 3 )
{
echo '<b style="color:#F64">Attention le fichier log n\'existe pas</b><br />';
$fileTxt = 'Mon Apr 18 12:01:57 2016'."\r\n";
$fileTxt .= 'Mon Apr 19 13:05:15 2015'."\r\n";
$fileTxt .= 'Thu Apr 20 17:04:40 2016'."\r\n";
$fileTxt .= 'Sun Apr 21 17:51:52 2016'."\r\n";
$fileTxt .= 'Sun Apr 21 17:51:52 2016'."\r\n";
}else{
echo '<b style="color:#090">Le fichier log est bien pris en compte</b><br />';
}

// on a un texte avec des dates ligne par ligne et on modifie les retour a la ligne
// pour respecter les 2 normes
$fileTxt = str_replace("\r\n", "\n", $fileTxt);

// on recupere les lignes une par une dans un tableau
$tab_dates = explode("\n", $fileTxt);

// si la recherche est en cour
if( isset($_GET['recherche']) )
{

foreach( $tab_dates as $valeur ) // avec le tableau on compare une ligne par une ligne
{
$tab_motsRechercher = explode(" ", $_GET['recherche']);
// recherche multiple séparer par un espace Exemple: "sun mon"
$correspondance = true;
foreach( $tab_motsRechercher as $mot)
{
// si un ligne contient le mot il sera affiché
if( strpos( strtolower($valeur) , strtolower( $mot ) ) !== false and $correspondance === true )
{
if( $_GET['typeRechercheET'] != 'on' ) //affiche les resultats avec un type de recherche en OU
{
echo $valeur."<br />";
continue(2); // pour sortir du foreach
}else{
$correspondance = true;
}

}else{
$correspondance = false; // permet la recherche en Et car si un des resultat ne corespond il est éliminé
continue(2); // pour sortir du foreach (évite les boucles si le resultat (correspondance) est deja negatif)
}


}

// affiche les resultats avec un type de recherche en ET
if( $correspondance and $_GET['typeRechercheET'] == 'on')
{
echo ".".$valeur."<br />";
}

}

}

// En dessous il y a 2 lignes qui permetes de
// mettre en forme une date anglaise au format
// de son choix

//$timestamp = strtotime("Mon Apr 18 16:05:16 2016");
//echo date("D M H:m:s Y", $timestamp );


?>
<br />
<br />
<form action="" method="get">
<label>Recherche en "ET"</label>
<input type="checkbox" name="typeRechercheET"/>
<label>Entrer un mot de recherche</label>
<input type="text" name="recherche"/>
</form>

0