Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/11/2011, 19h56   #1
Membre du Club
 
Avatar de unix27
 
Inscription : septembre 2003
Messages : 281
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2003
Messages : 281
Points : 62
Points : 62
Par défaut Parser un fichier texte

Bonsoir, j'ai un fichier texte avec la structure suivante:
1-les ; représentent les colonnes.
2- les | représentent les lignes.
en résumer j'ai ce fichier test.txt par exemple:
Citation:
abcd;
123
efghi;8854556|jklm;5546aaa;nopqrs
et je souhaite remplir un tableau avec ça:
$tab[1][1]=abcd
$tab[1][2]=123efghi
$tab[1][3]=8854556
$tab[2][1]=jklm
$tab[2][1]5546aaa
$tab[2][1]nopqrs

Avant que je plonge dans les fonctions et les délimiteurs... php est ce qu'il a une solution avec par exemple preg_match_all() ou autres qui fait ce que je cherche?
__________________
unix27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 20h00   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
des explode suffiront, d’où vient ce type de donnée ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 20h03   #3
Membre du Club
 
Avatar de unix27
 
Inscription : septembre 2003
Messages : 281
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2003
Messages : 281
Points : 62
Points : 62
Citation:
Envoyé par stealth35 Voir le message
des explode suffiront, d’où vient ce type de donnée ?
le fichier test.txt est alimenté à partir d'un site web
__________________
unix27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 20h12   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par unix27 Voir le message
le fichier test.txt est alimenté à partir d'un site web
ta pas possibilité de changer ce format ?

(les explode marchent ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 21h19   #5
Membre du Club
 
Avatar de unix27
 
Inscription : septembre 2003
Messages : 281
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2003
Messages : 281
Points : 62
Points : 62
Citation:
Envoyé par stealth35 Voir le message
ta pas possibilité de changer ce format ?

(les explode marchent ?
apparemment les explode ne marche pas
j'ai utilisé ce bout de code pour commencé:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$file = fopen("test.txt", "r");
//Output a line of the file until the end is reached
while(! feof($file))
  {
  $ligne=explode("|", $file);
 
  }
fclose($file);////////////////////////////////////////
echo $ligne[0];
echo '<br />';
echo $ligne[1];
le tableau $ligne est vide
oui je peux changé le format le quel je met?
__________________
unix27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 23h30   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
fait plutot un CSV (fputcsv pour creer, fgetcsv pour lire)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 23h58   #7
Membre du Club
 
Avatar de unix27
 
Inscription : septembre 2003
Messages : 281
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2003
Messages : 281
Points : 62
Points : 62
Citation:
Envoyé par stealth35 Voir le message
fait plutot un CSV (fputcsv pour creer, fgetcsv pour lire)
j'ai pas su utilisé le fputcsv il me génère des erreurs du coup j'ai bricolé avec ça
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$fichier=fopen("test.csv","a+");
 
for($i=0; $i<=10 ; $i++) 
{
   for($j=1; $j<=5 ; $j++) 
    {
   fputs($fichier,$taburl[$i][$j]);
   fputs($fichier,";"); 
	}
   fputs($fichier,"|"); 
 
}
fclose($fichier);			// fermeture fichier
ceci marche bien lors de la création reste maintenant le parcours de ce même fichier et mettre les valeurs dans un tableau
__________________
unix27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 09h43   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
pourquoi faire des for ???

c'est juste

Code :
1
2
3
4
5
6
7
8
$fichier=fopen('test.csv', 'a+');
 
foreach($taburl as $row)
{
    fputcsv($fichier, $row, ';');
}
 
fclose($fichier);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 01h56   #9
Membre du Club
 
Avatar de unix27
 
Inscription : septembre 2003
Messages : 281
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2003
Messages : 281
Points : 62
Points : 62
Citation:
Envoyé par stealth35 Voir le message
pourquoi faire des for ???

c'est juste

Code :
1
2
3
4
5
6
7
8
$fichier=fopen('test.csv', 'a+');
 
foreach($taburl as $row)
{
    fputcsv($fichier, $row, ';');
}
 
fclose($fichier);
malheureusement ça ne marche pas
__________________
unix27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h32   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
qu'est ce qui ne marche pas ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 11h52   #11
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
Hum... Je suppose que ce qui cloche, c'est que fputcsv fait une ligne par tableau alors que unix27 voudrait un | comme séparateur de lignes...

En méthode bourrin, avec juste des explodes et des implodes, je suppose qu'on doit pouvoir faire un truc du genre :
Code :
1
2
3
4
5
6
$file = file_get_contents('test.txt');
$lignes = explode('|', $file);
$data = array();
foreach ($lignes as $ligne) {
    $data[] = explode(';', $ligne);
}
et vice-versa :
Code :
1
2
3
4
5
6
$lignes = array();
foreach ($data as $dataLigne) {
    $lignes[] = implode(';', $dataLigne);
}
$file = implode('|', $lignes);
file_put_contents('test.txt', $file);
Mais c'est très moche, ça ne gère probablement pas les retours à la ligne, ni les cas où tu as un séparateur dans un corps de texte et ainsi de suite... Ce serait mieux si on arrivait à quelque chose avec fputcsv et fgetcsv (ou que tu changeais de format pour avoir un format un peu moins ésotérique )
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 21h37   #12
Membre du Club
 
Avatar de unix27
 
Inscription : septembre 2003
Messages : 281
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2003
Messages : 281
Points : 62
Points : 62
Citation:
Envoyé par stealth35 Voir le message
qu'est ce qui ne marche pas ?
il s'agissais de la fonction fputcsv par les explode marche bien puisque j'ai réussi a avoir la boucle que je cherché



Citation:
Envoyé par Celira Voir le message
Hum... Je suppose que ce qui cloche, c'est que fputcsv fait une ligne par tableau alors que unix27 voudrait un | comme séparateur de lignes...

En méthode bourrin, avec juste des explodes et des implodes, je suppose qu'on doit pouvoir faire un truc du genre :
Code :
1
2
3
4
5
6
$file = file_get_contents('test.txt');
$lignes = explode('|', $file);
$data = array();
foreach ($lignes as $ligne) {
    $data[] = explode(';', $ligne);
}
et vice-versa :
Code :
1
2
3
4
5
6
$lignes = array();
foreach ($data as $dataLigne) {
    $lignes[] = implode(';', $dataLigne);
}
$file = implode('|', $lignes);
file_put_contents('test.txt', $file);
Mais c'est très moche, ça ne gère probablement pas les retours à la ligne, ni les cas où tu as un séparateur dans un corps de texte et ainsi de suite... Ce serait mieux si on arrivait à quelque chose avec fputcsv et fgetcsv (ou que tu changeais de format pour avoir un format un peu moins ésotérique )
voici j'ai utilisé ça et il prend en compte les retours en ligne
Code :
1
2
3
4
5
6
7
8
9
10
 
$contenu=file_get_contents('test.csv');
$ligne=explode("|",$contenu);
for($i=0;$i<count($ligne);$i++)
{
  $j=0;
$champ[$j]=...
$j++
$champ[$j]=..
...
voila ligne parcour les ligne et champ me récupére les colonne
merci a vous deux stealth35 et Celira
__________________
unix27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 21h53   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
pas de for mais foreach pour parcourir un array, pourquoi ne pas un CSV propre ou un serialize ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h28.


 
 
 
 
Partenaires

Hébergement Web