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...
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...
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)
Rejoignez-nous