OVH Cloud OVH Cloud

lire un texte entre des balises.

9 réponses
Avatar
AkiraChaplin
Bonjours, je voudrais utiliser php avec des fichiers textes et éviter
mysql
pour cela je vousdrais savoir s'il cette fonction existe :

Il sagirait d'un fichier texte avec des information entre des balises
personalisés

- membre.txt serait :

<div name=nom>jean</div>
ou
<nom>jean</nom>
<mail>jean@jean.com</mail>
<nom>marc</nom>
<mail>marc@marc.com</mail>

- membre.php serait :

ouvre membre.txt
affiche tout les textes entre la balise <nom>




est ce possible ?

j'ai pour l'instant cela, ma la fonction en me convient pas :

<?php
//avec $art qui determine @


//a chaque fois qu'il y a @ on ecxecute le echo
$art = "@";
$string = "1234567899876543210@ 4m4r@ 69_LL_COOL_J@john@ abilio@ Acta@
actarus@ adidi77@ aero55@ aim@ aki.be@ ";
// Utilisez aussi les nouvelles lignes et les tabulations
// comme s&eacute;parateur de mots
$tok = strtok($string, $art);

while ($tok !== false) {
echo "$tok - ";
$tok = strtok("$art");
}
?>

9 réponses

Avatar
Florian Sinatra
*AkiraChaplin* @ 02/04/2006 10:55 :
Bonjours, je voudrais utiliser php avec des fichiers textes et éviter
mysql


Mais pourquoi ?

pour cela je vousdrais savoir s'il cette fonction existe :

Il sagirait d'un fichier texte avec des information entre des balises
personalisés

- membre.txt serait :

<div name=nom>jean</div>
ou
<nom>jean</nom>
<mail></mail>
<nom>marc</nom>
<mail></mail>

- membre.php serait :

ouvre membre.txt
affiche tout les textes entre la balise <nom>




est ce possible ?


C'est ce qui s'appelle du XML. Selon ta version de PHP, tu pourras avoir
besoin de :
* <http://php.benscom.com/manual/fr/ref.xml.php>
* <http://php.benscom.com/manual/fr/ref.simplexml.php>
* <http://php.benscom.com/manual/fr/ref.dom.php>
* <http://php.benscom.com/manual/fr/ref.domxml.php>

j'ai pour l'instant cela, ma la fonction en me convient pas :

<?php
//avec $art qui determine @


//a chaque fois qu'il y a @ on ecxecute le echo
$art = "@";
$string = "1234567899876543210@ 4m4r@ @ abilio@ Acta@
actarus@ adidi77@ aero55@ aim@ aki.be@ ";
// Utilisez aussi les nouvelles lignes et les tabulations
// comme s&eacute;parateur de mots
$tok = strtok($string, $art);

while ($tok !== false) {
echo "$tok - ";
$tok = strtok("$art");
}


Pourquoi faire aussi compliqué...

foreach( explode("@",$string) as $token ) {
echo "$tok -";
}

Avatar
Calimero
AkiraChaplin wrote:
Bonjours, je voudrais utiliser php avec des fichiers textes et éviter
mysql
pour cela je vousdrais savoir s'il cette fonction existe :

Il sagirait d'un fichier texte avec des information entre des balises
personalisés

- membre.txt serait :

<div name=nom>jean</div>
ou
<nom>jean</nom>
<mail></mail>
<nom>marc</nom>
<mail></mail>

- membre.php serait :

ouvre membre.txt
affiche tout les textes entre la balise <nom>


Tu es entrain de réinventer l'XML, on dirait. ;)

PHP offre différents jeux de fonctions qui s'appuient sur différents
parsers XML.

Extension libxml qui s'appuie sur libxml2 d'xmlsoft (lib xml
initialement issue de projet Gnome) à partir de PHP5.1
http://fr3.php.net/manual/fr/ref.libxml.php

Simple XML qui permet un parsing simplifié (plus rapide à mettre en
place, mais moins puissant) à partir de PHP5
http://fr3.php.net/manual/fr/ref.simplexml.php

XML, extension basée sur expat, disponible de puis PHP3.
http://fr3.php.net/manual/fr/ref.xml.php

--
@+
Calimero

Avatar
tarvos
Renseigne toi sur le langage de gestion de données XML, puis cherche
des parseurs PHP.
Avatar
dwojylac.nospam
AkiraChaplin wrote:

Bonjours, je voudrais utiliser php avec des fichiers textes et éviter
mysql
pour cela je vousdrais savoir s'il cette fonction existe :

Il sagirait d'un fichier texte avec des information entre des balises
personalisés

- membre.txt serait :

<div name=nom>jean</div>
ou
<nom>jean</nom>
<mail></mail>
<nom>marc</nom>
<mail></mail>

- membre.php serait :

ouvre membre.txt
affiche tout les textes entre la balise <nom>


Bonjour

ton fichier a une structure xml pour peu que tu lui rajoutes une entête
<?xml version="1.0" encoding="ISO-8859-1" ?> (ou un autre encodage)
et
<membres>
<membre>
<nom>jean</nom>
<mail></mail>
</membre>
<membre>
<nom>marc</nom>
<mail></mail>
</membre>
...
</membres>

tu peux alors le lire en php par l'intermédiaire des fonctions de
lecture de fichier fopen() et fread()
et récupérer les données dans un tableau associatif avec
xml_parse_into_struct(). ces fonctions sont présentes depuis php3

Ou tu peux aussi utiliser le système de base de données dans des
fichiers géré par classe sqlite de php5.

--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.

Avatar
CrazyCat
<?
$pattern = "!<nom>(.*)</nom>!/Us";
preg_match_all($file, $pattern, $matches);
for ($i=0;$i<count($matches[1]);$i++) {
echo $matches[1][$i]."<br />n";
}
?>
Avatar
AkiraChaplin
<?php

//a chaque fois qu'il y a @ on ecxecute le echo
$string = "1234567899876543210@ 4m4r@ @ abilio@ Acta@
actarus@ adidi77@ aero55@ aim@ aki.be@ ";
foreach( explode("@",$string) as $tok ) {
echo "$tok -"; ;
}

?>

je vous remercie infiniment pour toutes vos réponses.
Le code ci dessus fonctionne a merveille
et je met ce sujet de discution dans mes favoris afin d'avoir le
plaisir de parcourir les liens parlant du xml.

pour être franc je souhaite avant tout éviter mysql car sons
aprentissage est complexe
j'ai même du mal a comprendre les 4 fonctions de base
lire une table
ecrire une table

mais la qualité de vos réponses peut être me font penser que la
solitude d'un autodidacte un peut perdus saura trouver des génies en
php/mysql


merci encore
Avatar
loufoque
<?
$pattern = "!<nom>(.*)</nom>!/Us";



Ne supporte pas l'imbrication. (au fait, il me semble que le / est en trop)
Pour l'imbrication il faudrait faire

$pattern = '#<nom>((?:(?:(?!</nom>).)*?(?R).*?)+|.+?)</nom>#s'

puis faire un traitement récursif

Avatar
CrazyCat
loufoque wrote:
$pattern = "!<nom>(.*)</nom>!/Us";
Ne supporte pas l'imbrication. (au fait, il me semble que le / est en trop)



Au temps pour moi, il y a effectivement un "/" de trop.
Par contre, j'ai du mal à saisir ton histoire d'imbrication...

Le source originale est du type:
<nom>jean</nom>
<mail></mail>
<nom>marc</nom>
<mail></mail>
et on veut récupérer ce qui est entre <nom> et </nom>

Je ne vois pas l'intérêt d'aller chercher midi à 14h.



--
Astuces informatiques: http://www.crazycat.info
Tchattez en liberté: http://www.crazy-irc.net


Avatar
Calimero
AkiraChaplin wrote:

pour être franc je souhaite avant tout éviter mysql car sons
aprentissage est complexe
j'ai même du mal a comprendre les 4 fonctions de base
lire une table
ecrire une table

mais la qualité de vos réponses peut être me font penser que la
solitude d'un autodidacte un peut perdus saura trouver des génies en
php/mysql


Le SQL de base est quand même assez simple à apprendre. Et c'est bien
pratique ! :)

Puis en terme de performances et d'accès concurrentiels...

--
@+
Calimero