affich un contenu de fichier a partir d'une ligne precise

Eléphant du PHP | 86 Messages

15 mars 2006, 14:32

Bonjour,
je voudrais affiché le contenu d'un fichier mais a partir d'une ligne precise (qui commencerais par un signe particulier comme # par exemple)

j'ai fais ça
<?php
$lines = file ('fichier.txt');

foreach ($lines as $line) {
   echo '' . htmlspecialchars($line) . '<br />'."\n";
}
?> 
Mais ça affiche tout le contenu alors que je veux que ça affiche qu'a partir d'une ligne x

Mammouth du PHP | 768 Messages

15 mars 2006, 16:00

Le fichier est il volumineux ?
Sur la ligne débutant par #, qu'est ce qui suit ?

Voici un essai avec les expressions régulières
<?php
/* texte.txt

blabla inutile 
blabla inutile
blabla inutile
# A PARTIR DE LA
blabla utile
blabla utile
blabla utile

*/

$cont = file_get_contents('texte.txt');
preg_match('`#(.*)`s', $cont, $matches);

echo nl2br($matches[1]);
/* ça affiche 

A PARTIR DE LA
blabla utile
blabla utile
blabla utile

*/
?>
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 86 Messages

15 mars 2006, 21:21

oui le fichier est volumineux et la ligne commencant par # est "#donnees" donc s'il y avait moyen de ne pas voir le mot donnees aussi ça sera bien :oops:

Mammouth du PHP | 768 Messages

15 mars 2006, 22:03

oui le fichier est volumineux et la ligne commencant par # est "#donnees" donc s'il y avait moyen de ne pas voir le mot donnees aussi ça sera bien :oops:
<?php
$cont = file_get_contents('texte.txt'); 
preg_match('`#donnees\r{1}(.*)$`s', $cont, $matches); 

echo nl2br(ltrim($matches[1])); 
?>
J'utilise ltrim car bizarrement, j'ai un retour chariot en début de capture.
J'ai pourtant bien laissé un retour à la ligne unique dans le masque.
Si quelqun a la solution, je prend note :wink:
Pour ton problème ma_pomme, je ne sais pas si cette méthode est la meilleure. Combien de ligne ???
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 86 Messages

15 mars 2006, 23:18

pres de 70 000 lignes :?

Mammouth du PHP | 768 Messages

15 mars 2006, 23:57

pres de 70 000 lignes :?
ah quand même ! :shock:
c'est pour une tâche programmée (exécution en ligne de commande) ou pour une consultation à la demande (affichage dans un navigateur) ?
Si c'est la deuxième réponse, créé une moulinette pour inserer tout ça dans une table (MySQL par exemple)
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 86 Messages

16 mars 2006, 01:03

:? c'est la deuxieme :?

Mais c'est quoi une moulinette :? :?

Car chaque ligne contiens plusieur données et quand une données est cherché il faut que je recupere la ligne complete :? :?

Mammouth du PHP | 768 Messages

16 mars 2006, 09:01

:? c'est la deuxieme :?

Mais c'est quoi une moulinette :? :?

Car chaque ligne contiens plusieur données et quand une données est cherché il faut que je recupere la ligne complete :? :?
j'appelle une moulinette une transformation automatique de donnée.
file_get_contents() ne convient pas pour ce que tu souhaites faire car tout est stocké dans une seule variable.
Il faut que tu parcours le fichier ligne par ligne et que tu utilises les expressions régulières pour capturer ce dont tu as besoin.
Montre nous un exemple d'au moins deux lignes différentes
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 86 Messages

16 mars 2006, 10:11

toute les lignes sont faite de la meme façon

une ligne complete donne ça
2:201:6;M;BSG 75;Le Compte de Lisle;sami;1;0;3;4;6;15;27;1531764;327993;116517;29700;22;0;38;0;0;0;0;0;0;0;0;8250;0;0;2;7650;6300;1000;90;0;85;1;1;60;0;2;26;24;24;26;0;10;2;12;10;6;8;12;2;6;0;0;0;2;11;11;13;12;13;12;8;12;7;7;10;6;7;2;1;2;;1;0;3;4;6;15;27;0;0;19136;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;441;0;0;0;0;0;1;0;0;0;2;0;0;0;0;0;4;0;1;0;0;0;0;0;0;5;5;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;


mais une grande parti ne font que ça
2:201:7;;G8 B.D.E;alchemist;ichigo57;0;

Mammouth du PHP | 768 Messages

16 mars 2006, 11:28

Que souhaites tu récupérer dans cette ligne ?
ps: jète un oeil sur la fonction explode: http://fr.php.net/explode
ça te permet de découper la chaîne grâce au séparateur ';'
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 101 Messages

16 mars 2006, 11:40

ou tu peux utiliser la fonction list() c'est assez pratique mais je sais pas si ça correspond a ce que tu veux faire, surtout si tu l'utilise avec le explode
voir la doc

Eléphant du PHP | 86 Messages

16 mars 2006, 12:17

ben je souhaite recupere toutes les données mais que si j'appel l'une des cinq premiere ça recupere toute celles de la ligne auquelle elle appartient

voici ce que j'ai fais mais je n'arrive a recupere que la premiere ligne :(
<?php
$cont = file_get_contents('fichier.txt');
preg_match('`#donnees(.*)`s', $cont, $matches);

$donnees = nl2br($matches[1]);
list($coordonnees, $lune, $alliance, $planete, $joueur) = explode(";", $donnees);  

echo $coordonnes;
echo $lune;
echo $alliance;
echo $planete;
echo $joueur;
?> 
bon par la suite il faudra que j'envoi sur la base comme ça je pense
mysql_connect('host', 'user', 'pass');
mysql_select_db('base');

       mysql_query($coordonnees, $lune, $alliance, $planete, $joueur); //La requête

mysql_close(); 

Je pense qu'il faudrait une boucle pour récupéré les lignes suivantes mais comment faire pour ne pas reprendre a chaque fois la ligne 1

Eléphant du PHP | 86 Messages

18 mars 2006, 12:36

un petit UP :oops:

Donc comment faire une boucle et ne pas reprendre la meme ligne a chaque fois :(