Page 1 sur 1

Recupérer des chaines de caractères bornées par "&&

Posté : 05 janv. 2009, 12:03
par bull955
Bonjour et meilleurs voeux à toutes et à tous.

Pour une application dynamique en flash, je dois récupérer des données contenues dans un fichier texte dont voici un extrait :
&cat2Id=2&
&cat2Name=2008&
&cat2file=2008/galerie2008.txt&
&cat2image=2008/thumbs/Image05.jpg&


//Number of thumbs across
&horzthumbs=4&

//Number of thumbs down
&vertthumbs=3&
Je ne parviens pas à récupérer les dites chaines, même en échappant le caractère & avec \&.
Voici mon code :
if (file_exists($file)){
  echo "le fichier " . $file . " existe."."<br>";
  $ouvre=fopen($file,"r");  // ouverture du fichier
    while (!feof ($ouvre))          // tant que pas en fin de fichier
        {
   
    $lecture = fgets($ouvre, 4096); // stockage dans $lecture
   
    if (strpos($lecture,'\&' , 0) > 0) {
  $donnee=substr($lecture,0,strpos($lecture, '\&', 1)); 

  $combien=count($donnee)-1; // nbre d'éléments bornés par "&"
  echo "<b>Ce fichier contient ",$combien," données : </b><br><br>";
  }
  for ($i=0;$i<$combien;$i++)
        {
  // modification des données
  // on modifie le nombre de rubriques
  if (ereg("&catcount=",$donnee[$i])){$donnee[$i]=str_replace(substr($donnee[$i],10,1),substr($donnee[$i],10,1)+1);}
  // stockage temporaire des données toujours avec le séparateur
  $liste_modif.=$donnee[$i]."<br>";
 
        }
    echo $lecture;
        }
   
   
  fclose($ouvre);        // fermeture
Qu'est ce qui cloche ?

Merci d'avance pour votre temps.

Posté : 05 janv. 2009, 12:49
par fab
Au vu de ton fichier texte je ferai de manière un peu différence je m'explique :

- 1 : Je supprimerai tous les &
-2 : Je parcourerai les lignes une par une
-3 : Pour chaque ligne un explode avec comme délimiteur = ce qui donnerai :
array(
[0] => ta variable
[1] => la valeur
)

Posté : 06 janv. 2009, 10:28
par bull955
Bonjour Fab,

Merci pour ta réponse.

J'avais envisagé cette solution, mais l'importartion de données dans flash depuis un fichier texte nécessite le pointeur "&" pour encadrer les données à utiliser.
De plus, le client devra pouvoir rajouter une série de 3 lignes pour paramétrer une nouvelle rubrique et modifier la valeur de catcount. Par exemple :
&catcount=3&

.../...

&cat3Id=1&
&cat3Name=2009&
&cat3file=2009/galerie2009.txt&
&cat3image=2009/image10.jpg&
Donc si je supprime tous les "&", il faut que je les réintègre en fin de traitement. Je multiplie les risques d'erreur...
[/quote]

Posté : 06 janv. 2009, 12:53
par Aureusms
A la place de
if (strpos($lecture,'\&' , 0) > 0) {
  $donnee=substr($lecture,0,strpos($lecture, '\&', 1)); 

  $combien=count($donnee)-1; // nbre d'éléments bornés par "&" 
Si tu essayé directement de passer par les tableau avec explode() :
//tu créé le tableau
$tableau_donnee = explode ("&",$lecture);
//tu extraits la première et dernière positions
$tableau_donnee = array_shift($tableau_donnee); //première
$tableau_donnee = array_pop($tableau_donnee) ; //dernière

//tu comptes combien de valeur tu as
//les valeurs sont facilement extractibles avec foreach{...
$combien=count($tableau_donnee);

foreach ($tableau_donnee as $valeur)
{
$tab_temp = explode ("=",$valeur);
echo $tab_temp[0]; // cle
echo $tab_temp[1]; //valeur;
}


Posté : 06 janv. 2009, 14:15
par stopher
Salut ,

Pourquoi n'utilises tu pas simplement parse_str() exemple :
$string = "&cat3image=2009/image10.jpg&";

parse_str($string,$arr);

var_dump($arr);
Te retournera un tableau :

Code : Tout sélectionner

array(1) { ["cat3image"]=> string(16) "2009/image10.jpg" }

Posté : 06 janv. 2009, 14:58
par blof
Bonjour,
je dois récupérer des données contenues dans un fichier texte
l'importation de données dans flash depuis un fichier texte nécessite le pointeur "&" pour encadrer les données à utiliser.
Je n'arrive pas à comprendre ce que tu cherches à obtenir ...

Tu veux mettre ces données dans des variables ?, dans un fichier ?, sous quelle forme ?

Peux-tu donner un exemple concret de ce que tu veux avoir ?

Posté : 06 janv. 2009, 16:20
par bull955
Bonjour,

Mon fichier texte contient notamment ceci :
&catcount=3&

.../...

&cat3Id=3&
&cat3Name=2009&
&cat3file=2009/galerie2009.txt&
&cat3image=2009/image10.jpg&
Le menu dans le flash lit "catcount" et sait qu'il y a 3 occurrences, donc il lit cat*Id jusqu'à la troisième occurrence.

et affiche tous les cat*Name et tous les cat*image par exemple :
2007 - 2007/image01.jpg
2008 - 2008/image05.jpg
2009 - 2009/image10.jpg

il va ensuite chercher lors du clic sur 2008 par exemple toutes les informations contenues dans cat*file afin de les afficher.

Mon client veut pouvoir modifier ces fichiers sans passer par un éditeur de texte et un ftp, donc via son admin php.

je dois donc pouvoir incrémenter "catcount" en cas d'ajout et rajouter 4 lignes
&cat*Id=*&
&cat*Name=****&
&cat*file=****/galerie****.txt&
&cat*image=****/image10.jpg&

ou les modifier si nécessaire.

Donc, je dois isoler chaque chaine bornée par les "&" pour pouvoir les traiter.

Posté : 06 janv. 2009, 17:32
par Invité
( j'étais loin d'avoir compris )
Mon client veut pouvoir modifier ces fichiers sans passer par un éditeur de texte et un ftp, donc via son admin php.
Il va donc falloir passer par un formulaire.

As-tu une idée de ce formulaire qui va permettre de modifier les données existantes, éventuellement de les supprimer, ou d'en rajouter ?
( je ne parle pas encore du programme qui va modifier le fichier )

Posté : 06 janv. 2009, 20:43
par fab
Bonjour Fab,

Merci pour ta réponse.

J'avais envisagé cette solution, mais l'importartion de données dans flash depuis un fichier texte nécessite le pointeur "&" pour encadrer les données à utiliser.
De plus, le client devra pouvoir rajouter une série de 3 lignes pour paramétrer une nouvelle rubrique et modifier la valeur de catcount. Par exemple :
&catcount=3&

.../...

&cat3Id=1&
&cat3Name=2009&
&cat3file=2009/galerie2009.txt&
&cat3image=2009/image10.jpg&
Donc si je supprime tous les "&", il faut que je les réintègre en fin de traitement. Je multiplie les risques d'erreur...
[/quote]

En fesant un explode tu ne les supprimes quand dans le tableau créé et ainsi en lire en extraire les valeurs. La variable contenant par exemple &cat3Id=1& ( celle sur laquelle tu dois faire ton explode, si tu lis ligne par ligne ton fichier ) gardera les & et ainsi si tu as absolument transmettre la chaine avec les & tu l'auras toujours dans le coin :)

Je ne vois donc pas de soucis

Posté : 06 janv. 2009, 23:49
par Invité
En ce qui concerne le formulaire, je pense ne pas avoir de problème, car il n'y a que 2 entrées à saisir par le client : l'année et l'image qu'il veut assigner à l'entrée (pour ce fichier, pour les autres c'est une image + un titre + un commentaire).
Le reste va se faire "en automatique" : la création du répertoire de l'année si il n'existe pas, l'incrémentation du catcount, et la création des 4 lignes avec l'occurrence du catcount, dans le cas où il est en création. En modification, on appellera les données de l'année à modifier, donc les 4 lignes.