IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème de lecture dans un fichier


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 38
    Points
    38
    Par défaut Problème de lecture dans un fichier
    Bonjour,
    je viens vers vous car je n'arrive plus à y voir clair...
    Ca doit être simple mais je ne trouve pas.
    J'ai un calendrier qui envoit des dates, heures et noms, dans un fichier "texte0.php" recevant ces infos.
    Chaque date crée une référence ($timestamp)...
    (Par exemple le timestamp 1317160800 correspond au : 28/ 09/ 2011)
    Tout se passe bien, les dates, heures, infos parviennent bien dans le fichier "texte0.php" mais j'ai un problème avec ma fonction de "recherche" dans ce fichier.
    Je n'arrive pas à isoler les lignes correspondantes à ce timestamp => dans le fichier "texte0.php" en relecture.
    Si je recherche : le timestamp 1317160800, j'ai le nombre de fois qu'il est trouvé, mais tous les timestamp ou très peu s'affichent alors que je voudrais que s'affichent uniquement les timestamp concernés (par ex : 1317160800).
    Pour exemple du résultat souhaité après clic sur mon bouton "rechercher" :

    timestamp N°1317160800-> trouvé : 2 / fois =>
    28/ 09/ 2011 de 9 h 00 à 10 h00 Mr Duran
    28/ 09/ 2011 de 13 h 00 à 15 h00 Mr Bidule

    Alors que je n'arrive qu' a avoir toutes les dates ou aucune selon comment je règle : fgets($fp, '...'
    Le bout de code parlera peut être plus que moi...(!!!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <form method="POST">
        Référence date : <input type="text" name="ref" value="<?php print $timestamp; ?>"/><br/>
        <input type="submit" value="Rechercher" />
    <?php
    	if (!empty($_POST['ref'])) {
    define('FICHIER', 'texte0.php');
        $resultats =array();
        @ $fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
        while (!feof($fp)) {
            $ligne = fgets($fp, '224');
            if (preg_match('|\b' . preg_quote($_POST['ref']) . '\b|i', $ligne))  {
                $resultats[] = $ligne;
            }
        }
    		    fclose($fp);
        $nb = count($resultats);
        if ($nb > 0 ) {
    		echo "<ul><li><div style='background:#88C678;border:dashed 1px blue;'><span style='color:#000033;'><u><b>CETTE REFERENCE DE DATE A ETE TROUVEE ! VEUILLEZ VERIFIER.</b></u></span> </div></li>";
            echo "'$ref' trouvé $nb fois : "; print '<br />'; 
            foreach ($resultats as $v);  {
                echo "$v";
            }
     
        } else {
            echo("<br/><font color='#336633'>CETTE SALLE A CETTE DATE NE FAIT PAS ENCORE L'OBJET D'UNE RESERVATION.</font><br/>
    		Vous pouvez proposer votre réservation en toute tranquilité.<br/>");
     
        }
     
    }
    Merci par avance si vous souhaitez m'aider un peu...

  2. #2
    Invité
    Invité(e)
    Par défaut


    Quelle est la tête de ton fichier texte0.php ? Est-il gros ? S'il ne l'est pas, lis-le avec file_get_contents. Effectue ta recherche avec une regex

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 34
    Points : 38
    Points
    38
    Par défaut
    Oui, le plus simple pour t'aider serait de voir l'ensemble de ton code.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 38
    Points
    38
    Par défaut
    Merci pour ces conseils.
    Le fichier de stokage est pas "super gros" mais il pourra contenir tout de même genre 600 ko en pointe...
    Je vais aller voir sur "manuel php" ce qu'il en retourne à ce propos =>(file_get_contents)...
    L'ensemble de mon script ?
    Euh c'est en 4 parties le // 'calendrier' // 'envoi' // 'reçoit' // et fichier de stokage 'texte0.php' //
    Cette partie c'est le fichier 'envoi' en fait...(c'est peut être pas super bien écrit, mais bon, autodidacte quoi... :-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    <form action="recoit-y-c4_2.php" method="POST" >
     
    <input type"text" name="infos" value="
    <?php
       $date = priv_reg_glob_calendar('date');
    	if ($date == '') {
     print
    	$month;
    	}
    	else { 
    	 ?> <br /><br /><?php
    	print 'DATE :  ';
    	 print
    		$day 		= substr($date, 6, 2);print '/'; 
    		print ' '; print  
    		$month 		= substr($date, 4 ,2); print '/';
    	print  ' '; print
    		$year		= substr($date, 0 ,4);print '--->';
    print  ''; print 'Référence : '; print $timestamp 	= mktime(0, 0, 0, $month, $day, $year); print '--->'; ?><?php print  'De : '; ?>">
     
     		<select name="liste1"> 
    <option value="9 heures">9 heures
    <option value="10 heures">10 heures 
    <option value="11 heures">11 heures
    <option value="12 heures">12 heures
    <option value="13 heures">13 heures
    <option value="14 heures">14 heures
    <option value="15 heures">15 heures
    <option value="16 heures">16 heures
    <option value="17 heures">17 heures
    <option value="18 heures">18 heures
    </select>
    		<select name="liste2"> 
    <option value="00 mn A ">00 mn
    <option value="15 mn A ">15 mn 
    <option value="30 mn A ">30 mn
    <option value="45 mn A ">45 mn
     A : 
    </select>
     
     		<select name="liste3"> 
    <option value="9 heures">9 heures
    <option value="10 heures">10 heures 
    <option value="11 heures">11 heures
    <option value="12 heures">12 heures
    <option value="13 heures">13 heures
    <option value="14 heures">14 heures
    <option value="15 heures">15 heures
    <option value="16 heures">16 heures
    <option value="17 heures">17 heures
    <option value="18 heures">18 heures
    </select>
    		<select name="liste4"> 
    <option value="00 mn">00 mn
    <option value="15 mn">15 mn 
    <option value="30 mn">30 mn
    <option value="45 mn">45 mn
     
    </select>
    -La salle sera retenue <input type"text" name="personnel" value="Salle retenue par ->    <?php
    print ' (nom du responsable) <br/>---------------------------<br />' ?>">
    <?php
    	if(empty($personnel)){ print 'vous n avez pas rempli tous les champs'; } else { print 'ok'; }
    	 ?>
    		 	<input type="submit" value="Valider">
    </form>
    <form method="POST">
        Référence date : <input type="text" name="ref" value="<?php print $timestamp; ?>"/><br/>
        <input type="submit" value="Rechercher" />
     
     
     
    	<?php
    	if (!empty($_POST['ref'])) {
    define('FICHIER', 'texte0.php');
        $resultats =array();
        @ $fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
        while (!feof($fp)) {
            $ligne = fgets($fp, '224');
            if (preg_match('|\b' . preg_quote($_POST['ref']) . '\b|i', $ligne))  {
                $resultats[] = $ligne;
            }
        }
    		    fclose($fp);
        $nb = count($resultats);
        if ($nb > 0 ) {
    		echo "<ul><li><div style='background:#88C678;border:dashed 1px blue;'><span style='color:#000033;'><u><b>CETTE REFERENCE DE DATE A ETE TROUVEE ! VEUILLEZ VERIFIER.</b></u></span> </div></li>";
            echo "'$ref' trouvé $nb fois : "; print '<br />'; 
            foreach ($resultats as $v);  {
                echo "$v";
            }
     
        } else {
            echo("<br/><font color='#336633'>CETTE SALLE A CETTE DATE NE FAIT PAS ENCORE L'OBJET D'UNE RESERVATION.</font><br/>
    		Vous pouvez proposer votre réservation en toute tranquilité.<br/>");
     
        }
     
    }
     
    ?>
    </form>
     
    </div><!-- fin css = y-c1 -->

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 38
    Points
    38
    Par défaut
    @David
    Effectivement, c'est une bonne piste... Par rapport à ça j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $fh = fopen("texte0.php", "r"); $file = file_get_contents("texte0.php"); echo $file; ?>
    Là où je bloque encore, c'est plutôt en syntaxe pour demander à file_get_contents de ne donner en echo que la ligne voulue ($timestamp);
    J'y travail... Et en gardant la partie où le nombre de résultats est affiché (extrait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            foreach ($resultats as $v);  {
                echo "$v";
            }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Pas besoin d'un fopen devant file_get_contents ; et cette fonction est nettement plus simple et efficace pour lire des petits fichiers (je considère que 600ko c'est petit).

    Par contre, il nous manque encore la structure du fichier que tu souhaites lire. Car si c'est un fichier structuré par ligne, tu ferais peut-être mieux de le lire avec la fonction file(), qui transforme directement le contenu en tableau (1 cellule par ligne). De cette manière tu pourrait très facilement parcourir ton tableau et effectuer ta recherche

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Points : 38
    Points
    38
    Par défaut
    Bonjour,
    Très justement tu dis :
    "Par contre, il nous manque encore la structure du fichier que tu souhaites lire."
    C'est précisément mon actuel problème.
    La lecture s'effectue correctement si mes ligne d'infos sont les unes sous les autres.
    AAA
    BBB
    CCC
    DDD...Etc...
    mais pas comme ça :
    AAA<br />BBB<br />CCC<br />DDD...Etc...
    C'est à dire qu'après essai, j'ai écrit mes dates les unes sous les autres sur le bloc-note windows et pas de problème.
    Par contre, quand j' envois mes dates via mon code en ligne, ça donne ça et ça ne fonctionne pas pour la recherche...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div style="color:red;"><i><b>HORAIRES DE RESERVATIONS DE LA SALLE 1</b></i></div> <br /><a href="c.php">Retour</a><br /><br /> <br /><br />07/ 09/ 2011--De : 9 heures00 mn A 10 heures00 mnSalle retenue par -> Yves  <br /><br />08/ 09/ 2011--De : 9 heures00 mn A 12 heures00 mnSalle retenue par ->  Sophie <br /><br />09/ 09/ 2011--De : 9 heures00 mn A 18 heures00 mnSalle retenue par ->  vvv <br /><br />07/ 09/ 2011--De : 10 heures00 mn A 12 heures00 mnSalle retenue par ->  Chris
    Il faudrait que je puisse envoyer mes données (dates) et que le fichier soit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div style="color:red;"><i><b>HORAIRES DE RESERVATIONS DE LA SALLE 1</b></i></div> <br /><a href="c.php">Retour</a><br /><br /> 
    07/ 09/ 2011--De : 9 heures00 mn A 10 heures00 mnSalle retenue par -> Yves  
    08/ 09/ 2011--De : 9 heures00 mn A 12 heures00 mnSalle retenue par ->  Sophie 
    09/ 09/ 2011--De : 9 heures00 mn A 18 heures00 mnSalle retenue par ->  vvv 
    07/ 09/ 2011--De : 10 heures00 mn A 12 heures00 mnSalle retenue par ->  Chris
    Je galère avec le retour chariot (\n \r) depuis des heures, rien n'y fait.
    Peut on générer // en php dans un fichier (txt ou autre) // un vrai retour chariot comme je fais avec le bloc-note ?
    AAA
    BBB
    CCC

Discussions similaires

  1. [C ANSI] Problème de lecture dans un fichier
    Par F0ul dans le forum Débuter
    Réponses: 7
    Dernier message: 06/02/2008, 14h00
  2. [POI] Problème écriture/lecture dans un fichier Excel
    Par steuve dans le forum Documents
    Réponses: 6
    Dernier message: 02/07/2007, 15h47
  3. Problème de lecture dans un fichier texte.
    Par Mike888 dans le forum C
    Réponses: 3
    Dernier message: 24/05/2007, 11h45
  4. problème de lecture dans un fichier
    Par phy4me dans le forum Fortran
    Réponses: 1
    Dernier message: 20/05/2007, 20h55
  5. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo