récupération d'un fichier txt en tableau php

récupération d'un fichier txt en tableau php - PHP - Programmation

Marsh Posté le 17-07-2009 à 10:14:22    

Après de nombreuses recherches je n'ai malheureusement pas obtenu les réponses adéquates, donc je viens vers vous pour obtenir plus d'aide.
 
J'ai un fichier txt issu d'un tableau excel ayant en séparateur un tabulation :
 
image1   nom1     url1
image1   nom2     url2
image2   nom3     url3
image3   nom4     url4
...
 
 
En php, je dois afficher dans un tableau :
 
IMAGE1    NOM1
            NOM2
 
IMAGE2    NOM3
 
IMAGE3   NOM4
 
Le nom doit être associé à l'url (<a href="$url">$nom</a> )
 
Pour le moment je débute en php et j'ai donc peu de maîtrise dans la réalisation de lecture en boucle dans un fichier
 
<?php
$fichier = fopen("edito.txt","r" );
$file = explode("\n", $fichier);
 
est mon début de fichier.
 
Merci pour votre aide à venir.

Reply

Marsh Posté le 17-07-2009 à 10:14:22   

Reply

Marsh Posté le 17-07-2009 à 10:22:20    

Il s'agit d'un fichier CSV ou bel et bien d'un TXT ?

Reply

Marsh Posté le 17-07-2009 à 10:23:56    

La page actuelle est en html : http://www.weddingdresses.com/editorial.html
 
La liste globale est issue d'un fichier excel que j'ai retranscrit manuellement dans l'html (faute de temps pour le développer en php à l'époque).
Aujourd'hui on souhaite passer ça en dynamique en permettant à nos collègues US de mettre à jour leur listing sans notre intervention.

Reply

Marsh Posté le 17-07-2009 à 10:24:37    

Il s'agit d'un fichier .txt issu d'un fichier excel, enregistré avec comme séparateur : tabulation.

Reply

Marsh Posté le 17-07-2009 à 10:25:11    

oui mais le fichier d'origine sera un .txt ou un .csv ?

Reply

Marsh Posté le 17-07-2009 à 10:25:28    

la tabulation, c'est \t hein... et puis vérifie que tu n'a pas de saut de ligne, sinon, le dernier de chaque ligne sortira avec le premier de la ligne suivante.


---------------
Expert en expertises
Reply

Marsh Posté le 17-07-2009 à 10:26:14    

un petit exemple de contenu :
 
r_cover.gif Dev Valencia www.devvalencia.com
r_cover.gif Ines Di Santo www.inesdisanto.com
r_cover.gif Krikawa www.krikawa.com
r_cover.gif L'ezu Atelier www.lezu.com
r_cover.gif Nelson Jewellery www.nsbring.com
r_cover.gif Sasha Primak www.sashaprimak.com

Reply

Marsh Posté le 17-07-2009 à 10:28:11    

ce n'est pas un .csv
c'est un fichier appelé edito.txt.
 
Donc déjà si je comprends, dans mon $file = explode("\n", $fichier); c'est pas un \n mais un \t ?

Reply

Marsh Posté le 17-07-2009 à 10:35:21    

Bon, puisque tu ne réponds pas à ma question, voici un bout de code basé sur la doc de PHP

Code :
  1. <?php
  2. /* Lecture */
  3. $fp = fopen("edito.txt", "r" );
  4. $lines = array();
  5. while ($lines[] = fscanf($fp, "%s\t%s\t%s\n" )) ;
  6. fclose($fp);
  7.  
  8. /* Affichage */
  9. $previous_line = array(null, null, null);
  10. foreach($lines as $line) {
  11.    if($line[0] != $previous_line[0]) {
  12.        echo '<img src="' . $line[0] . '" />';
  13.    }
  14.    $previous_line = $line;
  15.    
  16.    echo '<a href="' . $line[2] . '">' . $line[1] . '</a>';
  17. }
  18. ?>


Pas testé, surement plein de fautes, mais çà te donne une idée du truc.


Message édité par Profil supprimé le 17-07-2009 à 10:43:09
Reply

Marsh Posté le 17-07-2009 à 10:43:45    

effectivement ça se rapproche de ce que je cherche :)
 
Pour ta question, je n'ai pas saisi ce que tu voulais savoir.
Ma situation d'origine est :
- edito.txt (données séparées par tabulation)
- edito.php (affiche le tableau issu de edito.txt)
 
edito.txt a été créé à partir de edito.xls en l'enregistrant au format TEXTE avec séparateur: tabulation.
Je ne vois pas quoi dire d'autre ^^
 
Dans le code que tu viens de me donner, il faut à présent que j'affiche l'image une seule fois :
 
pour plusieurs nom+url, j'ai la même image (cf http://www.weddingdresses.com/editorial.html --> titre Cover, Q&A etc.)
 
pour Cover, j'ai r_cover.gif, pour Q&A j'ai r_q-a.gif...

Reply

Marsh Posté le 17-07-2009 à 10:43:45   

Reply

Marsh Posté le 17-07-2009 à 10:46:45    

Après quelques modifs, j'ai trouvé pour n'afficher l'image qu'une seule fois par groupe de nom.
Je continue mes investigations mais en tout cas tu m'as bien aidé lucas :)

Reply

Marsh Posté le 17-07-2009 à 10:48:16    

en fait au moment ou j'ai écris tu n'avais pas encore répondu :D mais tu as bien répondu ;)
 
Pour ton problème d'images, je n'ai pas bien compris :/  
Tu veux éviter d'afficher 2 fois la même image c'est çà ?
EDIT :  [:grilled]


Message édité par Profil supprimé le 17-07-2009 à 10:48:57
Reply

Marsh Posté le 17-07-2009 à 10:48:49    

Ah! petit souci.
Quand il rencontre un espace dans le nom, il tronque la donnée.
 
En gros, j'ai le nom "Dev Valencia" et il ne m'affiche que Dev
 
Any idea ?

Reply

Marsh Posté le 17-07-2009 à 10:51:27    

Pour que tu vois ce que ça donne :
http://www.weddingdresses.com/editorial.php
 
autre pb : en bas j'ai une image inexistante qui s'affiche. Y a moyen qu'il n'affiche pas ça ?

Reply

Marsh Posté le 17-07-2009 à 10:53:36    

Source probable du problème :

doc de PHP a écrit :

Tous les caractères blancs de la chaîne de formatage correspondent à autant d'espaces dans le flux d'entrée. Cela signifie qu'une tabulation \t dans la chaîne de format peut remplacer un espace simple dans le flux d'entrée.


Essaye çà : Remplace la ligne 5 par

Code :
  1. while ($lines[] = fscanf($fp, "%s    %s    %s\n" ));

Si çà ne marche pas, je ne vois qu'une chose : ne pas autoriser les espaces, les remplacer par des underscores (_) dans le nom (puis de les transformer en espaces à la lecture).


Message édité par Profil supprimé le 17-07-2009 à 10:54:16
Reply

Marsh Posté le 17-07-2009 à 10:54:44    

et dernier pb, quand je regarde les url associées aux noms, ca ne va pas car elles ne sont pas bonnes :
 
Pour le premier lien il contient "http://www.weddingdresses.com/Valencia" au lieu de www.devvalencia.com (même pb pour tous les liens)

Reply

Marsh Posté le 17-07-2009 à 10:56:44    

c'est pas lié au code mais au fichier source on est d'accord ? :heink:

Reply

Marsh Posté le 17-07-2009 à 10:59:43    

oui effectivement. Le fichier source n'est pas adapté. Toujours ces foutus espaces (j'ai les mêmes soucis en perl)
 
Donc, malgré le remplacement de la ligne 5, le 'bug' persiste.
 
Donc, il faut vraisemblablement remplacer l'espace par un _ puis le retransformer à l'affichage.
 
L'espace présent dans le nom fait qu'à la lecture, il met dans l'url le 2e mot du nom... d'où les erreurs ensuite.
 
Je t'embête encore avec ça mais si tu peux m'aider là dessus je t'en serais très reconnaissant :)

Reply

Marsh Posté le 17-07-2009 à 11:03:04    

Je présume qu'il me faut utiliser ceci  
str_replace(" ",'_', ...);

Reply

Marsh Posté le 17-07-2009 à 11:43:43    

faut faire l'inverse pour l'affichage

Reply

Marsh Posté le 17-07-2009 à 11:55:15    

c'est à dire ?
Ce que je ne comprends pas c'est pourquoi l'espace génère cette 'coupure' dans la lecture du fichier alors qu'on spécifie bien que la tabulation est le critère pour passer à la colonne suivante.

Reply

Marsh Posté le 17-07-2009 à 14:47:11    

à mon avis il va falloir procéder autrement :/
avec des expressions régulières et tout :/
(file + expression régulière sur chaque ligne du fichier)
Sinon le fichier source ne pourra pas contenir d'espace :/


Message édité par Profil supprimé le 17-07-2009 à 14:47:28
Reply

Marsh Posté le 17-07-2009 à 15:05:06    

j'ai effectué la modif dans le fichier source en virant les espaces dans les noms. De toute façon, la mise à jour sera faite par mes collègues aux US. Si je leurs dis de mettre des _ dans les noms ca ira. J'ai fait la modif pour remplacer les _ par des espaces ensuite et ça marche.
Il me reste juste un pb de div qui déconne et ce sera bon.
 
En tout cas, je te remercie sincèrement pour le gros coup de main.

Reply

Marsh Posté le 17-07-2009 à 15:06:15    

:jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed