Parser un fichier Texte

SeiKen02100 Messages postés 5 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 17 juillet 2008 - 17 juil. 2008 à 09:41
audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008 - 18 juil. 2008 à 13:33
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

...


Donc en gros cela donne, pour mieux comprendre :

NomCollone0,NomCollonne1,NomCollone2,NomCollonne3,NomCollone­4,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.
Le but est de parser ce fichier pour obtenir 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...

Si vous pourriez me donner quelque conseils et solutions ça serait super

Merci beaucoup

3 réponses

Bling 182 Messages postés 510 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 5 juillet 2009 3
17 juil. 2008 à 11:48
je dirais d'utiliser readline, explode, et faire quelques jolies boucles...
0
SeiKen02100 Messages postés 5 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 12:15
Merci, voila ce que j'ai fais pour le moment, mais c'est loin d'être vraiment ce que je veux

<html>

<?php
$fp ="essai.txt";

if (file_exists($fp))
{
$tableau = file($fp);
$tmp=count($tableau);
$i=0;

while($tmp>$i)
{
    $tab=explode(",",$tableau[$i]);
       
echo $tab[0].'
';
echo $tab[1].'
';
echo $tab[2].'
';
    $i++;
}
}
?>

</html>

Ça affiche seulement pour chaque ligne du tableau les 3 première données qui étaient séparer par une "," (normal je sais), je n'arrive pas a faire la boucle qui afficherait tout le contenu d'une ligne a moins de faire des echos du nombre de colonne, mais comme ça doit marcher pour d'autre fichier c'est pas la solution...

Je suis perdu dans tout ca...
0
audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
18 juil. 2008 à 13:33
Salut,

Essaye ceci ça devrait te convenir =)

<?php

// On ouvre sous forme de tableau le fichier "text.txt".
$aFile = file('text.txt');

// On crée la fonction "Seiken" qui va insérer le nom de la colonne avant la valeur.
function Seiken(&$sValue, $iKey, $aFirst) {    if ($iKey !0) $sValue $aFirst[$iKey].','.$sValue;
}

// On crée la variable "$aTemp" qui contiendra la première ligne.
$aTemp = array();

// On crée la variable "$sReturn" qui contiendra le fichier final.
$sReturn = '';

// On analyse toutes les lignes du tableau de la variable "$aFile".
foreach($aFile as $iKey => $sValue) {
   
    // On enlève le saut de ligne à la fin de chaque valeur.
    $sValue = str_replace("\r\n", '', $sValue);
   
    // On crée un tableau à partir des virgules.
    $aValue = explode(',', $sValue);
   
    // Si c'est la première ligne du tableau on la place dans la variable $aTemp.    if ($iKey 0) $aTemp $aValue;
    // Si ce n'est pas la première ligne on execute la fonction Seiken sur le tableau.
    else {
        array_walk($aValue, 'Seiken', $aTemp);
        $sReturn .= implode(',', $aValue)."\r\n";
    }

}

// On retire le dernier saut de ligne.
$sReturn = substr($sReturn, 0, strlen($sReturn)-2);

// On affiche le résultat.
echo $sReturn;

?>

For every choice, a consequence (Fable)
0
Rejoignez-nous