Parser un fichier Texte
Résolu
Seiken02
-
Sri Lumpa Messages postés 177 Date d'inscription Statut Membre Dernière intervention -
Sri Lumpa Messages postés 177 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Alors voila je vous explique le problème, j'ai un fichier texte sous cette forme la :
?,Alala,Balala,Calala,Dalala,Elala,Falala,Galala,Halala
Nom1,a1,b1,c1,d1,e1,f1,g1,h1
Nom2,a2,b2,c2,d2,e2,f2,g2,h2
Nom3,a3,b3,c3,d3,e3,f3,g3,h3
Nom4,a4,b4,c4,d4,e4,f4,g4,h4
Nom5,a5,b5,c5,d5,e5,f5,g5,h5
Nom6,a6,b6,c6,d6,e6,f6,g6,h6
...
NomCollone0,NomCollonne1,NomCollone2,NomCollonne3,NomCollone4,NomCollonne5
NomLigne1,donnée_colonne1_ligne1,donnée_colonne2_ligne1,donnée_colonne3_ligne1...
NomLigne2,donnée_colonne1_ligne2,donnée_colonne1_ligne2,...
NomLine3,donnée_colonne1_ligne3,donnée_colonne2_ligne3,...
NomLigne4,donnée_colonne1_ligne4,donnée_colonne2_ligne4,...
...
(Je ne sais pas si c'est plus clair...)
C'est un exemple le vrai fichier est beaucoup plus gros, pour info c'est un fichier excel mis sous format texte avec des "," comme séparateur.
Le but est de parser ce fichier en obtenant a la fin dans un autre fichier texte:
1,Alala,a1
2,Alala,a2
3,Alala,a3
...
donc en gros en espérant être plus clair ça devrait donné:
NomLigne1,NomCollonne1,donnée_colonne1_ligne1
NomLigne2,NomCollonne1,donnée_colonne1_ligne2
NomLigne3,NomCollonne1,donnée_colonne1_ligne3
...
Ça pour X nombre de ligne et Y nombre de colonne
Cela peut amener a un fichier texte avec des millions de lignes...
Il y a des macros sous excel, mais ça reste limiter a 1 millions de lignes ce qui est loin d'être suffisant dans mon cas
Il faudrait réaliser le code en PHP, je m'y suis mis mais c'est loin d'être évident
Si vous pourriez me donner quelque conseils et solutions ca serait super
Merci beaucoup!
Voila ce que j'ai pour le moment...
<html>
<body>
<?php
$fichier="essai.txt";
$donnee='';
//$donnee2='';
$fp=fopen($fichier,'r');
while (!feof($fp))
{
$position=explode(",",fgets($fp,4096));
$donnee=$position[0];
//$donnee2=$position[1];
echo $donnee;
//echo ";";
//echo $donnee2.'<br>';
}
fclose($fp);
?>
</body>
</html>
Alors voila je vous explique le problème, j'ai un fichier texte sous cette forme la :
?,Alala,Balala,Calala,Dalala,Elala,Falala,Galala,Halala
Nom1,a1,b1,c1,d1,e1,f1,g1,h1
Nom2,a2,b2,c2,d2,e2,f2,g2,h2
Nom3,a3,b3,c3,d3,e3,f3,g3,h3
Nom4,a4,b4,c4,d4,e4,f4,g4,h4
Nom5,a5,b5,c5,d5,e5,f5,g5,h5
Nom6,a6,b6,c6,d6,e6,f6,g6,h6
...
NomCollone0,NomCollonne1,NomCollone2,NomCollonne3,NomCollone4,NomCollonne5
NomLigne1,donnée_colonne1_ligne1,donnée_colonne2_ligne1,donnée_colonne3_ligne1...
NomLigne2,donnée_colonne1_ligne2,donnée_colonne1_ligne2,...
NomLine3,donnée_colonne1_ligne3,donnée_colonne2_ligne3,...
NomLigne4,donnée_colonne1_ligne4,donnée_colonne2_ligne4,...
...
(Je ne sais pas si c'est plus clair...)
C'est un exemple le vrai fichier est beaucoup plus gros, pour info c'est un fichier excel mis sous format texte avec des "," comme séparateur.
Le but est de parser ce fichier en obtenant a la fin dans un autre fichier texte:
1,Alala,a1
2,Alala,a2
3,Alala,a3
...
donc en gros en espérant être plus clair ça devrait donné:
NomLigne1,NomCollonne1,donnée_colonne1_ligne1
NomLigne2,NomCollonne1,donnée_colonne1_ligne2
NomLigne3,NomCollonne1,donnée_colonne1_ligne3
...
Ça pour X nombre de ligne et Y nombre de colonne
Cela peut amener a un fichier texte avec des millions de lignes...
Il y a des macros sous excel, mais ça reste limiter a 1 millions de lignes ce qui est loin d'être suffisant dans mon cas
Il faudrait réaliser le code en PHP, je m'y suis mis mais c'est loin d'être évident
Si vous pourriez me donner quelque conseils et solutions ca serait super
Merci beaucoup!
Voila ce que j'ai pour le moment...
<html>
<body>
<?php
$fichier="essai.txt";
$donnee='';
//$donnee2='';
$fp=fopen($fichier,'r');
while (!feof($fp))
{
$position=explode(",",fgets($fp,4096));
$donnee=$position[0];
//$donnee2=$position[1];
echo $donnee;
//echo ";";
//echo $donnee2.'<br>';
}
fclose($fp);
?>
</body>
</html>
A voir également:
- Parser un fichier Texte
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
5 réponses
Ben tu récupères d'abord les lignes, puis sur chaque ligne tu récupères les colonnes... Tu fais juste un traitement différents sur la première ligne pour récupérer les noms de colonnes que tu stockes dans un tableau par exemple...
Je n'ai pas testé ce bout de code, mais ça va te permettre de stocker dans résult[nomLigneX][nomColonneY] la donnée situé à la ligne X, colonne Y...
$contents = stream_get_contents($fileHanlder); $result = array(); // On sépare les lignes $lignes = split("\n", $contents); // pour la première ligne, on récupère les nom des colonnes $noms = split(";", $lignes[0]); // On n'a plus besoin de la première ligne, on la dégage... unset($lignes[0]); // Maintenant, on s'occupe de chaque ligne foreach($lignes as $ligne){ $cols = $split(";", $ligne); foreach($cols as $index => $col){ $result[$cols[0]][$noms[index]] = $col; } }
Je n'ai pas testé ce bout de code, mais ça va te permettre de stocker dans résult[nomLigneX][nomColonneY] la donnée situé à la ligne X, colonne Y...
Tu peux aller voir ici pour te donner une idée... http://www.commentcamarche.net/forum/affich 7418300 obtenir lignes d un fichier en php
Après, la solution sera peut-être limitée par la taille de ton fichier... Je sais que pour moi, ça fonctionne pour des fichiers .txt du plusieurs méga, alors je suppose que pour un fichier Excel ça devrait passer....
Après, la solution sera peut-être limitée par la taille de ton fichier... Je sais que pour moi, ça fonctionne pour des fichiers .txt du plusieurs méga, alors je suppose que pour un fichier Excel ça devrait passer....
Je travail également sur un fichier texte.
J'ai déjà était voir ce lien, mais ça ne récupère que les lignes.
Ce n'est pas vraiment ce que je veux :s
J'ai déjà était voir ce lien, mais ça ne récupère que les lignes.
Ce n'est pas vraiment ce que je veux :s
J'ai tester ce bout de code,lorsque je fais un echo de
echo $result[$cols[0]][$noms[0]];
pour vérifier le résultat, ça m'écrit le résultat de la dernière ligne mais bien de la première colonne (0).
echo $result[$cols[0]][$noms[0]];
pour vérifier le résultat, ça m'écrit le résultat de la dernière ligne mais bien de la première colonne (0).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui c'est normal. J'ai mis du temps à capter pourquoi... Si tu fais ça à la fin du script, comme cols[0] contient encore le nom de ta dernière ligne, il t'affiche donc l'élement situé à la dernière ligne, colonne 0.
Pour vérifier si tout s'est bien passé, fait un print_r($result) (attention, seulement sur un petit tableau sinon ça va être vraiment horrible ^^). Normalement il devrait t'afficher un truc du genre:
Array( [nomLigne1] => Array([nomColonne1] => valeur (1;1), etc...))
Si tu veux parcourir ton tableau résultat, tu peux faire deux foreach() imbriqué :
Pour vérifier si tout s'est bien passé, fait un print_r($result) (attention, seulement sur un petit tableau sinon ça va être vraiment horrible ^^). Normalement il devrait t'afficher un truc du genre:
Array( [nomLigne1] => Array([nomColonne1] => valeur (1;1), etc...))
Si tu veux parcourir ton tableau résultat, tu peux faire deux foreach() imbriqué :
foreach($result as $nomLigne => $temp) { foreach($temp as $nomColonne => $valeur){ // Traitement.... } }