Parser un fichier Texte

[Résolu/Fermé]
Signaler
-
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
-
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>

5 réponses

Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
68
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...
$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...
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
68
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....
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 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).
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
68
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é :
foreach($result as $nomLigne => $temp) {
    foreach($temp as $nomColonne => $valeur){
        // Traitement....
    }
}