Créer une grille horaire a partir d'un fichier texte ?

Petit nouveau ! | 8 Messages

16 juil. 2010, 18:15

Bonjour, j'essaye depuis quelques jours de récuperer des données contenu dans un fichier texte afin de les formater dans un tableau et les rendre beaucoup plus clair.
Mon fichier texte:

Code : Tout sélectionner

<mag> magasin de paris <cai> caisse 8 <heu> 12 13 14 15 16 17 18 19 20 <min> 15 12 21 <min> 22 32 34 <mag> magasin de lille <cai> caisse 22 <heu> 12 13 14 15 16 17 18 19 20 <min> 15 12 21 <min> 22 32 34
J'ai essayé ça :
<?php
$ouvre=fopen("text.txt","r"); 
while (!feof ($ouvre))         
	{

$lecture = fgets($ouvre, 4096);
$donnee=explode("\n",$lecture);  

$combien=count($donnee)-1; 


for ($i=0;$i<=$combien;$i++)
	{
if (preg_match("/<des>/i", $donnee[$i])) {
$des= $donnee[$i];

}
if (preg_match("/<arr>/i", $donnee[$i])) {
$arr= $donnee[$i];

}
if (preg_match("/<heu>/i", $donnee[$i])) {
$heu = $donnee[$i];
}
if (preg_match("/<min>/i", $donnee[$i])) {
$min = $donnee[$i];
}

	}

	}
	
	
	echo "<tr><td>$arr</td> <td>$des</td></tr>
	      <tr><td>$heu</td></tr>
		  <tr><td>$min</td></tr>
	";
fclose($ouvre);		// fermeture
?>
Mais le problème et que les minuute ne se mettent pas sous l'heure associé, pourriez vous m'aidr svp ?

Eléphanteau du PHP | 30 Messages

17 juil. 2010, 12:13

utilise la balise <pre> pour afficher l'heure et les minutes :
<tr><td><pre>$heu</pre></td></tr><tr><td><pre>$min</pre></td></tr>

J'ai testé ton code, et j'ai remarqué que seul les dernières minutes s'affichent.
J'ai fait cette version si jamais :
<?php
$contenuFichier=file_get_contents("text.txt");

$donnee		=	explode("\n",$contenuFichier);

foreach ($donnee as $key => $valeur){
	if (preg_match("/<des>/i",$valeur)){ $des= str_replace('<des>','',$valeur); }
	if (preg_match("/<arr>/i", $valeur)){ $arr= str_replace('<arr>','',$valeur); }
	if (preg_match("/<heu>/i", $valeur)){ $heu = str_replace('<heu>','',$valeur); echo "<tr><td></td><td><pre>$heu</pre></td></tr>"; }
	if (preg_match("/<min>/i", $valeur)){ $min = str_replace('<min>','',$valeur); echo "<tr><td></td><td><pre>$min</pre></td></tr>"; }
	
	if ($des != '' && $arr!=''){
		echo "<tr><td>$arr</td><td>$des</td></tr>";
		$des='';
		$arr='';	
	}
	
}
?>
PHP, Javascript, VBScript, Java, Python, Ruby, 4D, LotusScript, ObjectivC, C, C++, et sans compter les framework...
Qui a dit que les programmeurs n'avaient pas d'amis ?

Mon blog : http://www.programmeur.ch/blog/

Petit nouveau ! | 8 Messages

17 juil. 2010, 14:22

Merci beaucoup pour ton aide et surtout pour ta rapidité à répondre :D

Eléphanteau du PHP | 30 Messages

17 juil. 2010, 14:24

Merci beaucoup pour ton aide et surtout pour ta rapidité à répondre :D
De rien, mais est-ce que ça a marché pour toi ?
PHP, Javascript, VBScript, Java, Python, Ruby, 4D, LotusScript, ObjectivC, C, C++, et sans compter les framework...
Qui a dit que les programmeurs n'avaient pas d'amis ?

Mon blog : http://www.programmeur.ch/blog/

Invité
Invité n'ayant pas de compte PHPfrance

17 juil. 2010, 17:15

J'arrive à afficher la grille horaire de tout les magasins correctement avec la balise <pre> que je ne connaissais pas. Par contre j'essaye de faire un formulaire (post) ou je pourrais recuperer uniquement la grille d'un seul magasin. Aurais-tu une idée?
Je voudrais aussi rendre la grille horaire plus jolie.....pas moyen !
Merci

Petit nouveau ! | 8 Messages

17 juil. 2010, 17:22

J'arrive à afficher la grille horaire de tout les magasins correctement avec la balise <pre> que je ne connaissais pas. Par contre j'essaye de faire un formulaire (post) ou je pourrais recuperer uniquement la grille d'un seul magasin. Aurais-tu une idée?
Je voudrais aussi rendre la grille horaire plus jolie.....pas moyen !
Merci :D

Eléphanteau du PHP | 30 Messages

17 juil. 2010, 18:24

Pour rendre la grille plus jolie passe par les CSS.

Une chose que je n'ai pas compris c'est que tu cherchais dans ton code "arr" et "des" alors qu'ils ne sont pas présent dans ton fichier.
Alors qu'il y a le magasin "mag" et la caisse...

Pour ton formulaire :
Créer un formulaire avec le nom de tes magasins dans un select.
Lorsque tu fais ta moulinette en ayant reçu le nom d'un magasin dans $_POST, tu filtre que sur ce magasin et tu ignore tout ce qui concerne les autres.

Voilà un petit essai que j'ai fait, la page doit se nommer "afficher_magasin.php", elle contient le formulaire et le code, et s'appelle elle même.
<form action="afficher_magasin.php" method="post">
	Magasin : <select name="magasin">
    	<option value="">Tous</option>
        <option value="magasin de paris" <? if ($_POST['magasin']=='magasin de paris'){ ?>selected="selected"<? } ?>>Magasin de paris</option>
        <option value="magasin de lille" <? if ($_POST['magasin']=='magasin de lille'){ ?>selected="selected"<? } ?>>Magasin de lille</option>
    </select>
    <input type="submit" value="Rechercher" />
</form>

<table boder="1">

<?php
$arForm	=	$_POST;

$bFiltreMagasin = (isset($arForm['magasin']) && $arForm['magasin']!=''); // Est-ce qu'on a reçu un formulaire et est-ce que le SELECT dans notre formulaire n'est pas sur "Tous"

$contenuFichier=file_get_contents("text.txt");
$donnee         =       explode("\n",$contenuFichier);
foreach ($donnee as $key => $valeur){
	if (preg_match("/<mag>/i",$valeur)){ 
		$magasin= str_replace('<mag>   ','',$valeur);  // Supprimer le <mag> et les 3 espaces
		if (($bFiltreMagasin && $magasin == $arForm['magasin']) || !$bFiltreMagasin){ 
			echo '<tr><td colspan="2"><h3>'.$magasin.'</h3><td><tr>'; 
		}
	}
	
	if (($bFiltreMagasin && $magasin == $arForm['magasin']) || !$bFiltreMagasin){
		if (preg_match("/<des>/i",$valeur)){ $des= str_replace('<des>','',$valeur); }
		if (preg_match("/<arr>/i", $valeur)){ $arr= str_replace('<arr>','',$valeur); }
		if (preg_match("/<heu>/i", $valeur)){ $heu = str_replace('<heu>','',$valeur); echo "<tr><td></td><td><pre>$heu</pre></td></tr>"; }
		if (preg_match("/<min>/i", $valeur)){ $min = str_replace('<min>','',$valeur); echo "<tr><td></td><td><pre>$min</pre></td></tr>"; }
       
		if ($des != '' && $arr!=''){
			echo "<tr><td>$arr</td><td>$des</td></tr>";
			$des='';
			 $arr='';       
		}
	}
}
?>

</table>
PHP, Javascript, VBScript, Java, Python, Ruby, 4D, LotusScript, ObjectivC, C, C++, et sans compter les framework...
Qui a dit que les programmeurs n'avaient pas d'amis ?

Mon blog : http://www.programmeur.ch/blog/

Petit nouveau ! | 8 Messages

17 juil. 2010, 20:17

Grâce à ton script:
<html>
<table>
<?php
$contenuFichier=file_get_contents("liste.txt");

$donnee         =       explode("\n",$contenuFichier);

foreach ($donnee as $key => $valeur){
        if (preg_match("/<ARR>/i",$valeur)){ $ARR= str_replace('<ARR>','',$valeur); echo "<tr><td></td><td><pre>$ARR</pre></td></tr>"; }
        if (preg_match("/<DIR>/i", $valeur)){ $DIR= str_replace('<DIR>','',$valeur); echo "<tr><td></td><td><pre>$DIR</pre></td></tr>"; }
		  if (preg_match("/<LIG>/i", $valeur)){ $LIG= str_replace('<LIG>','',$valeur); echo "<tr><td></td><td><pre>$LIG</pre></td></tr>";}
          if (preg_match("/<PER>/i", $valeur)){ $PER= str_replace('<PER>','',$valeur); echo "<tr><td></td><td><pre>$PER</pre></td></tr>";}       
	   if (preg_match("/<HEU>/i", $valeur)){ $HEU = str_replace('<HEU>','',$valeur); echo "<tr><td></td><td><pre>$HEU</pre></td></tr>"; }
        if (preg_match("/<MIN>/i", $valeur)){ $MIN = str_replace('<MIN>','',$valeur); echo "<tr><td></td><td><pre>$MIN</pre></td></tr>"; }
       
		 if (preg_match("/<LEG>/i", $valeur)){ $LEG= str_replace('<LEG>','',$valeur); echo "<tr><td></td><td><pre>$LEG</pre></td></tr>";}
       
        
}
?>
 </table>
 </html>

Comment appliquer un filtre ? merci pour ta reponse
Modifié en dernier par kimduc le 18 juil. 2010, 21:12, modifié 1 fois.

Eléphanteau du PHP | 30 Messages

17 juil. 2010, 21:35

Je penses que cette page devrait aller.
Elle chargera directement la liste dans un SELECT, et ensuite s'appelle elle même pour afficher soit tous les arrêts soit celui choisi.
Je te laisses essayer, si jamais contrôle que le nom de fichier est bien correct. J'ai mis quelques CSS à toi de les adapter selon tes goûts.

J'espère que cela t'iras. C'est pas forcément très joli comme code, je l'ai fait en vitesse. Normalement j'évite de mettre de créer de l'HTML avec des echos.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Document sans titre</title>
<style>
body{font-family:Verdana, Geneva, sans-serif; }
pre{margin:0px;}
h1{ font-size:18px; margin:3px;}
h2{ font-size:16px; margin:3px;}
h3{ font-size:14px; margin:3px;}
h4{ font-size:12px; margin:3px;}
td{ font-size:12px; margin:3px;}
.pair{ background-color:#EEE; }
.heure{ background-color:#AAA;padding-top:3px;padding-bottom:2px; }
.heure pre{ font-weight:bold; }
.legende{ font-style:italic; font-color:#3C6; }
</style>
</head>

<body>
<form action="afficher_arret.php" method="post">
	Arrêt : <select name="arret">
    	<option value="">Tous</option>
<?
$contenuFichier=file_get_contents("text.txt");
$donnee         =       explode("\n",$contenuFichier);

foreach ($donnee as $key => $valeur){
	if (preg_match("/<ARR>/i",$valeur)){ 
		$ARR= str_replace('<ARR>   ','',$valeur);  // Supprimer le <mag> et les 3 espaces
?>
        <option value="<? echo $ARR; ?>" <? if ($_POST['arret']==$ARR){ ?>selected="selected"<? } ?>><? echo $ARR; ?></option>      
<? }
}
?>
    </select>
    <input type="submit" value="Rechercher" />
</form>

<table border="0" cellpadding="0" cellspacing="0">

<?php
$arForm	=	$_POST;
$bFiltre = (isset($arForm['arret']) && $arForm['arret']!=''); // Est-ce qu'on a reçu un formulaire et est-ce que le SELECT dans notre formulaire n'est pas sur "Tous"
$ARR	=	'';

foreach ($donnee as $key => $valeur){
	if (preg_match("/<ARR>/i",$valeur)){ 
		$ARR= str_replace('<ARR>   ','',$valeur);  // Supprimer le <mag> et les 3 espaces
		if (($bFiltre && $ARR == $arForm['arret']) || !$bFiltre){ 
			echo '<tr><td colspan="2"><h1>'.$ARR.'</h1></td></tr>'; 
		}
	}
	  
	if (($bFiltre && $ARR == $arForm['arret']) || !$bFiltre){
		if (preg_match("/<DIR>/i", $valeur)){ 
			$DIR= str_replace('<DIR>   ','',$valeur); 
			if ($DIR!=''){ echo '<tr><td colspan="2"><h2>'.$DIR.'</h2></td></tr>'; }
		}
        if (preg_match("/<LIG>/i", $valeur)){ 
			$LIG= str_replace('<LIG>   ','',$valeur);
			if ($LIG!=''){  echo '<tr><td colspan="2"><h3>'.$LIG.'</h3></td></tr>'; }
		}
        if (preg_match("/<PER>/i", $valeur)){ 
			$PER= str_replace('<PER>   ','',$valeur); 
			if ($PER!=''){  echo '<tr><td colspan="2"><h4>'.$PER.'</h4</td></tr>'; } 
		}      
        if (preg_match("/<HEU>/i", $valeur)){ 
			$ligne=0;
			$HEU = str_replace('<HEU>   ','',$valeur);
			$HEU = str_replace('   ',"\t",$HEU); 
			if ($HEU!=''){  echo '<tr><td class="heure">&nbsp;</td><td class="heure"><pre>'.$HEU.'</pre></td></tr>'; } 
		}
        if (preg_match("/<MIN>/i", $valeur)){ 
			$ligne++;
			if ($ligne%2 == 0){ $class='class="pair"'; }else{ $class=''; }
			$MIN = str_replace('<MIN>   ','',$valeur); 
			$MIN = str_replace('   ',"\t",$MIN);
			if ($MIN!='' && str_replace(' ','',str_replace("\t",'',$MIN))!=''){  echo "<tr><td $class>&nbsp;</td><td $class><pre>$MIN</pre></td></tr>"; }
		}
        if (preg_match("/<LEG>/i", $valeur)){ 
			$LEG= str_replace('<LEG>   ','',$valeur); 
			if ($LEG!=''){  echo '<tr><td>&nbsp;</td><td class="legende"><br>'.$LEG.'</td></tr>'; }
		}
		
	}
}
?>

</table>
</body>
</html>
PHP, Javascript, VBScript, Java, Python, Ruby, 4D, LotusScript, ObjectivC, C, C++, et sans compter les framework...
Qui a dit que les programmeurs n'avaient pas d'amis ?

Mon blog : http://www.programmeur.ch/blog/

Petit nouveau ! | 8 Messages

17 juil. 2010, 21:53

Vraiment un grand merci.
La mise en forme CSS impecable, je suis en train de la travailler, par contre, il doit y avoir un probleme au niveau des options du select.
voila ce que j'ai quand je veux selectionner un arret (aucun arret n'apparait et forcement il ne m'affiche rien) :
Image

Par contre, quand je selectionne "tout", pas de problème .
Modifié en dernier par kimduc le 18 juil. 2010, 21:13, modifié 1 fois.

Eléphanteau du PHP | 30 Messages

17 juil. 2010, 22:10

J'utilise toujours <? et ?>, c'est peut-être de là que vient le problème, j'ai remplacé par <?php, reprend le nouveau code.
Si jamais, je remarque aussi qu'il y a des problèmes d'accents. Ta page ne semble pas être en UTF-8.

Tu peux vérifier le résultat sur ma page de test à cette adresse : http://www.programmeur.ch/afficher_arret.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Document sans titre</title>
<style>
body{font-family:Verdana, Geneva, sans-serif; }
pre{margin:0px;}
h1{ font-size:18px; margin:3px;}
h2{ font-size:16px; margin:3px;}
h3{ font-size:14px; margin:3px;}
h4{ font-size:12px; margin:3px;}
td{ font-size:12px; margin:3px;}
.pair{ background-color:#EEE; }
.heure{ background-color:#AAA;padding-top:3px;padding-bottom:2px; }
.heure pre{ font-weight:bold; }
.legende{ font-style:italic; font-color:#3C6; }
</style>
</head>

<body>
<form action="afficher_arret.php" method="post">
        Arrêt : <select name="arret">
        <option value="">Tous</option>
<?php
$contenuFichier=file_get_contents("text.txt");
$donnee         =       explode("\n",$contenuFichier);

foreach ($donnee as $key => $valeur){
        if (preg_match("/<ARR>/i",$valeur)){
                $ARR= str_replace('<ARR>   ','',$valeur);  // Supprimer le <mag> et les 3 espaces
?>
        <option value="<?php echo $ARR; ?>" <?php if ($_POST['arret']==$ARR){ ?>selected="selected"<?php } ?>><?php echo $ARR; ?></option>      
<?php }
}
?>
    </select>
    <input type="submit" value="Rechercher" />
</form>

<table border="0" cellpadding="0" cellspacing="0">

<?php
$arForm =       $_POST;
$bFiltre = (isset($arForm['arret']) && $arForm['arret']!=''); // Est-ce qu'on a reçu un formulaire et est-ce que le SELECT dans notre formulaire n'est pas sur "Tous"
$ARR    =       '';

foreach ($donnee as $key => $valeur){
        if (preg_match("/<ARR>/i",$valeur)){
                $ARR= str_replace('<ARR>   ','',$valeur);  // Supprimer le <mag> et les 3 espaces
                if (($bFiltre && $ARR == $arForm['arret']) || !$bFiltre){
                        echo '<tr><td colspan="2"><h1>'.$ARR.'</h1></td></tr>';
                }
        }
         
        if (($bFiltre && $ARR == $arForm['arret']) || !$bFiltre){
                if (preg_match("/<DIR>/i", $valeur)){
                        $DIR= str_replace('<DIR>   ','',$valeur);
                        if ($DIR!=''){ echo '<tr><td colspan="2"><h2>'.$DIR.'</h2></td></tr>'; }
                }
        if (preg_match("/<LIG>/i", $valeur)){
                        $LIG= str_replace('<LIG>   ','',$valeur);
                        if ($LIG!=''){  echo '<tr><td colspan="2"><h3>'.$LIG.'</h3></td></tr>'; }
                }
        if (preg_match("/<PER>/i", $valeur)){
                        $PER= str_replace('<PER>   ','',$valeur);
                        if ($PER!=''){  echo '<tr><td colspan="2"><h4>'.$PER.'</h4</td></tr>'; }
                }      
        if (preg_match("/<HEU>/i", $valeur)){
                        $ligne=0;
                        $HEU = str_replace('<HEU>   ','',$valeur);
                        $HEU = str_replace('   ',"\t",$HEU);
                        if ($HEU!=''){  echo '<tr><td class="heure">&nbsp;</td><td class="heure"><pre>'.$HEU.'</pre></td></tr>'; }
                }
        if (preg_match("/<MIN>/i", $valeur)){
                        $ligne++;
                        if ($ligne%2 == 0){ $class='class="pair"'; }else{ $class=''; }
                        $MIN = str_replace('<MIN>   ','',$valeur);
                        $MIN = str_replace('   ',"\t",$MIN);
                        if ($MIN!='' && str_replace(' ','',str_replace("\t",'',$MIN))!=''){  echo "<tr><td $class>&nbsp;</td><td $class><pre>$MIN</pre></td></tr>"; }
                }
        if (preg_match("/<LEG>/i", $valeur)){
                        $LEG= str_replace('<LEG>   ','',$valeur);
                        if ($LEG!=''){  echo '<tr><td>&nbsp;</td><td class="legende"><br>'.$LEG.'</td></tr>'; }
                }
               
        }
}
?>

</table>
</body>
</html>
PHP, Javascript, VBScript, Java, Python, Ruby, 4D, LotusScript, ObjectivC, C, C++, et sans compter les framework...
Qui a dit que les programmeurs n'avaient pas d'amis ?

Mon blog : http://www.programmeur.ch/blog/

Eléphanteau du PHP | 30 Messages

17 juil. 2010, 22:12

Au passage, quelle est la version de PHP que tu utilises ?
PHP, Javascript, VBScript, Java, Python, Ruby, 4D, LotusScript, ObjectivC, C, C++, et sans compter les framework...
Qui a dit que les programmeurs n'avaient pas d'amis ?

Mon blog : http://www.programmeur.ch/blog/

Petit nouveau ! | 8 Messages

17 juil. 2010, 22:24

Je travail en local pour le moment avec easyphp

Petit nouveau ! | 8 Messages

17 juil. 2010, 22:30

Ca marche impec, vraiment un grand merci.

PS: J'aurai surement d'autres questions :D