Lecture d'un fichier txt par php

Résolu/Fermé
Jperrio
Messages postés
71
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2010
- 30 oct. 2008 à 22:21
 fra09 - 14 déc. 2010 à 13:12
Bonjour,
J'appelle via php un fichier txt dans lequel j ai differentes info à mettre dans différentes case.

Au début, j'utilisais l'esapce comme séparatif de mes info.
Mais pour que le fichier soit plus lisible, je voudrais utiliser le retour à la ligne.
Je ne trouve pas le code de cette fonction pour l'appeler.

Qqn peut il m aider.

Je vous donne mon code php :
<?php
// Lit le fichier texte
$fichier = file ('essai.txt');

// Affiche toutes les lignes
foreach ($fichier as $line_num => $line) {
$info = explode("<br>",$line);

if ($info[6] =="col4"){
print $info[7];
}
}
?>

et mon fichier txt :
col1
colonne1
col2
colonne2
col3
colonne3
col4
colonne4

Merci de votre aide

1 réponse

Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
184
30 oct. 2008 à 23:40
Salut,
examinons attentivement le problème...

La fonction file() transforme un fichier en tableau. Essaye
print_r($fichier);
et tu verras que le type est Array.

Ton foreach extrait les chaînes de ce tableau pour les stocker dans $file, sur lequel tu appelles un explode(). C'est à ce moment que tu recherches les sauts de ligne. Et c'est là que ça coince, et pour deux raisons :

1/ la fonction file() traite déjà les sauts de ligne puisque chaque ligne devient un élément du tableau.

2/ les sauts de ligne ne sont pas du tout codés par <br>, tu confonds avec le html ! Sous les systèmes UNIX, le symbole est \n, et sous DOS c'est \r\n. Mais de toute façon la fonction file() gère ça à ta place, tu n'as pas à t'en soucier.


Grâce au print_r() dont je parle plus haut, tu verras que le code est en fait beaucoup plus simple...
<?php
// Lit le fichier texte
$fichier = file('essai.txt');

# print_r($fichier); // retirer le "#" pour vérifier

// Affiche toutes les lignes
foreach ( $fichier as $line ) {
  if ( "col4" == $line ) {
    print $line[7];
  }
}
?>

NB : je fais mes tests d'égalité à l'envers, comme ça ça me fait une fatal error si j'oublie un signe "=". Je trouve ça pratique, mais ce n'est qu'une question de goûts...
0
Salut et merci de ton aide.

J ai mis ton code en ligne et ca affiche le contenu de tout le fichier txt.

Pour te rendre compte, va sur jperrio2.free.fr/test

C'est la seul ligne du tableau rempli que j ai modifié.

Merci de me dire si tu vois une solution.
0
macgawel
Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008
90 > Jperrio
1 nov. 2008 à 11:25
Bonjour.

Si je suis bien, ton fichier texte est de la forme :
Nom 1
Contenu 1


Si oui, ce n'est pas évident de travailler dessus...

Une solution qui te simplifierait les choses :
Arrange ton texte comme ça :
Nom 1;Contenu 1
Nom 2;Contenu 2

En choisissant comme séparateur un caractère (voire une chaîne) que tu es sûr de ne pas utiliser.
Ensuite, il te 'suffit' de faire un explode( $separateur, $ligne) (qui va générer un tableau), et de tester :
SI $Tableau[0] = "col4"
ALORS echo $Tableau[1]

0
Jperrio > macgawel
Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008

1 nov. 2008 à 22:32
oK ET MERCI.

aVEC LA FONCTION PRINT8R? J AI TROUV2 UNE SOLUTION.

a+
0
salut;

je chercher coment je pourrait faire des espaces dans mes block commentaires en lisant dans un fichier text.
dans mon fichier text contient les informations suivante nom, date, heure et commentaire.
j'aimerai donc que chaque commentaire soit séparés dans ma page web.
j'utilise un script php qui lit bien tout les données dans mon fichier text mais il le met que dans un seul block..

merci de votre aide.
0