Page 1 sur 1

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

Posté : 15 mars 2006, 14:32
par ma_pomme
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

Posté : 15 mars 2006, 16:00
par mario
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

*/
?>

Posté : 15 mars 2006, 21:21
par ma_pomme
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:

Posté : 15 mars 2006, 22:03
par mario
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 ???

Posté : 15 mars 2006, 23:18
par ma_pomme
pres de 70 000 lignes :?

Posté : 15 mars 2006, 23:57
par mario
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)

Posté : 16 mars 2006, 01:03
par ma_pomme
:? 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 :? :?

Posté : 16 mars 2006, 09:01
par mario
:? 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

Posté : 16 mars 2006, 10:11
par ma_pomme
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;

Posté : 16 mars 2006, 11:28
par mario
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 ';'

Posté : 16 mars 2006, 11:40
par tomypunk
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

Posté : 16 mars 2006, 12:17
par ma_pomme
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

Posté : 18 mars 2006, 12:36
par ma_pomme
un petit UP :oops:

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