Parser un .txt

Signaler
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012
-
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012
-
salut,

je voudrai savoir comment lire un .txt en php

je veut ciblé la 2 ligne troisième mots
séparé par un espace

18 réponses

Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
bonjour
as tu déjà un code

ex1 data.txt

123 toto itti
tutu tuuu ttt
tt eee rrr

<?php
$array_fichier=file('data.txt');
//Affichage du résultat
echo '';
print_r($array_fichier);
echo '<hr>';
$mot=explode(' ',$array_fichier[1]);
echo $mot[1];
?>


Bonne programmation !
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

merci sa marche

c'est dans des paragraphes similaire de 10 ligne toute les 10 ligne y a un espace

je voudrai savoir comment répété l'opération sur chaque paragraphes sachant que le nombre de paragraphes est aléatoire
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
il suffit de compter les lignes
$c=count($array_fichier);
et un modulo 10 ... dans une boucle


Bonne programmation !
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

merci
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

en faite le nombre de ligne est aléatoire suivant les paragraphe

il y a trois lignes sans texte qui sépare les paragraphe
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

mai il commence toujours par les 2 même mots.

on peu se servir d'un mots comme balise pour créer la boucle ?
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Ton histoire n'est pas très claire et ta demande évolue au fil des messages.

Avant de trouver une solution adaptée il convient d'identifier clairement les "éléments fixes et uniques" de ton texte :
une structure qui se répète, des marqueurs, etc ... etc ...


on peu se servir d'un mots comme balise pour créer la boucle ?

Si tes mots sont systématiques et uniques oui.
Peut être avec un explode().

Menfin le mieux serait que tu fournisses un exemple clair et précis, parce que là, mise à part faire des réponses à l'aveuglette ...


Cordialement,

Kohntark -
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

voici le .txt a décoder le nombre de partie est aléatoire suivant le fichier

partie #119998888 niveau 1 (10 v/50 v) - 07/09/2011 19:02:20 CET
salle '1' #6-playermax
player 2 : joe (10 point)
player 1 : david (6 point)
player 1 : perd. 1 point
player 2 : gagne. 4 point
***david***
david perd [1 point] passe a (5) point


partie #119998887: niveau 1 (10 v/50 v) - 07/09/2011 19:02:20 CET
salle '1' #6-playermax
player 1 : david (10 point)
player 3 : eric (9 point)
player 2 : joe (6 point)
player 3 : null. 0 point
player 1 : perd. 4 point
player 2 : gagne. 4 point
***david***
david perd [4 point] passe a (6) point


je voudrai qui sorte comme sa

numéro de la partie => 119998887
niveau => 1
difficulté => 10 v/50 v
date => date
***joueur*** => david
point perdu ou gagné => perd. gagne. ou null.
total des points fin partie => (6)
nombre de joueurs => 3
nombre de joueurmax => 6


numéro de la partie => 119998888
niveau => 1
difficulté => 10 v/50 v
date => date
***joueur*** => david
point perdu ou gagné => perd. ou gagne. ou null.
total des points fin la partie => (5)
nombre de joueurs => 2
nombre de joueurmax => 6
Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Ouh là.. c'est pas plus facile de passer par une base SQL.. sans même faire du MySQL ou Postgre, un SQLlite devrait suffire non ?
S.
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
... nous sommes loin, très loin de ta demande initiale

Tu n'as pas trop le choix, il faut passer par une regex.

Voici une amorce pour la première ligne :
<?php
$txt = 
'partie #119998887: niveau 1 (10 v/50 v) - 07/09/2011 19:02:20 CET
salle \'1\' #6-playermax
player 1 : david (10 point)
player 3 : eric (9 point)
player 2 : joe (6 point)
player 3 : null. 0 point
player 1 : perd. 4 point
player 2 : gagne. 4 point
***david***
david perd [4 point] passe a (6) point ';

$regex = '`\s*partie\s\#(?\d+):
    \sniveau\s(?<niveau>\d{1,3})\s
    \((?<difficulte>\d{2,3}\sv/\d{2,3}\sv)\)\s-\s
    (?<date>\d{2}/\d{2}/\d{4}\s\d{2}:\d{2}:\d{2}\sCET)
    
`xu';
preg_match_all($regex, $txt, $aMatches);


echo '
numéro de la partie => '.$aMatches['partie'][0].'

niveau => '.$aMatches['niveau'][0].'

difficulté => '.$aMatches['difficulte'][0].'

date => '.$aMatches['date'][0].'
etc ...';
?>


Reste à parser le reste des lignes.

point perdu ou gagné => perd. gagne. ou null.

=> pas compris ce que tu veux obtenir là.


Cordialement,

Kohntark -
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

ok merci

c possible d'avoir des note sur le regex je connait pas du tout.

comment faire la boucle ?

ps. point perdu ou gagné => perd. gagne. ou null.

c savoir s'il a perdu ou gagné
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

ok c d exprésion reguliere jss debutant je cherche de se coté la
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

ok je croi avoir compris compris les regex


player 1 : david (10 point) ===> )\splayer\s(?<siege>\d+)\s\:\s(?[a-z1-9]+)\sect...

et je recupére le le numéro player et le nom joueur

c déjà un bon début merci
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

voila se que j'ai fait avec regex raccourci

je voudrai savoir comment injecter

"ex : $out['siege']" avec une requête mysql.




<?php



$ch= 'partie #119998887: niveau 1 (10 v/50 v) - 07/09/2011 19:02:20 CET player 1 : david (10 point)
player 3 : eric (9 point)
player 2 : joe (6 point)
player 3 : null. 0 point
player 1 : perd. 4 point
player 2 : gagne. 4 point
***david***
david perd [4 point] passe a (6) point

partie #119998888: niveau 1 (10 v/50 v) - 07/09/2011 19:02:20 CET player 1 : david (10 point)
player 3 : eric (9 point)
player 2 : joe (6 point)
player 3 : null. 0 point
player 1 : perd. 4 point
player 2 : gagne. 4 point
***david***
david perd [4 point] passe a (6) point';
preg_match_all('`(partie\s\#(?\d+)|player\s(?<siege>\d+)\s\:\s[a-z]+\s\(\d+\s[a-z]+\))`',$ch,$out);

$partie=$out['partie'];
$siege=$out['siege'];
$combien=count($partie); // nbre d'éléments séparés par "*"

echo " Ce fichier contient ",$combien," données :

";

for ($i =0;$i<=$combien;$i++)
{
echo "$partie[$i] $siege[$i] "; // affichage des données
}

?>
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

ps : g voulu allé vite g pas enlevé les commentaire qui corresponde pas.
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
je voudrai savoir comment injecter

"ex : $out['siege']" avec une requête mysql.


Désolé, je n'ai pas compris ta question.
Tu veux savoir comment faire une requête SQL INSERT ?


Cordialement,


Kohntark -
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

oui j'ai fait des teste sa insert 'array' dans les table.

je voudrai faire une requête qui s’exécute ds une boucle. si posible .
Messages postés
37
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
4 décembre 2012

la boucle :
{
partie: n°departie
siege : 1 2 3 ... jusqua 6 suivant le txt
}
en boucle jusqu' a la fin du fichier