Traitement de fichier en php

Signaler
Messages postés
49
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
17 février 2009
-
Messages postés
3
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
6 octobre 2009
-
Bonjour,
 J'ai un fichier sous ce format
14366,1,56.9,704,0.411326   
14366,2,56.2,703,0.0322821   
14366,3,57.5,688,0.181508   
14366,4,57.6,687,0.599771   
14366,5,59.1,669,0.274231   
14366,6,60.1,657,0.173746*
14360,1,56.9,704,0.411326   
14360,2,56.2,703,0.0322821   
14360,3,57.5,688,0.181508   
14360,4,57.6,687,0.599771   
14360,5,59.1,669,0.274231   
14360,6,60.1,657,0.173746*   
14359,1,56.9,704,0.411326   
14359,2,56.2,703,0.0322821   
14359,3,57.5,688,0.181508   
14359,4,57.6,687,0.599771   
14359,5,59.1,669,0.274231   
14359,6,60.1,657,0.173746*
14372,1,56.9,704,0.411326   
14372,2,56.2,703,0.0322821   
14372,3,57.5,688,0.181508   
14372,4,57.6,687,0.599771   
14372,5,59.1,669,0.274231   
14372,6,60.1,657,0.173746
deux type de separateur ,(virgule) et *(etoile)

Pour traiter ce ffichier avec du php, je veux dans un premier temps  separer les donneés en bloc grace au separateur (*)
Ensuite traiter chaque bloc en prenant en compte le separateur (,)

mais je suis bloquée au niveau de la premiere étape= > separation en bloc /separateur *

Voici mon script:
$ouvre = fopen ($uploadfile,"r"); // ouverture fichier en lecture "r"
                                while (!feof ($ouvre))// tant que pas en fin de fichier
                                {
                                   
                                    $lecture = fgets($ouvre, 4096); // stockage dans $lecture
                                    $donnee=explode("*",$lecture);  // parsing des données basé sur "*")
                                    $combien=count($donnee)-1; // nbre d'éléments séparés par "*"
                                    echo " Ce fichier contient ",$combien," données :

";
                                   
                                    for ($i =0;$i<=$combien;$i++)
                                        {
                                    echo $donnee[$i],"
";  // affichage des données
                                        }
                               
                                }

ce script ne me permet pas de faire ce que j'ai decris plus haut car dans un bloc il ya plusieurs lignes.
Si vous avez une idée pour m'aider .Merci d'avance

7 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
PAS TESTE!



$filename = 'le nom de ton fichier';
$handle = fopen($filename,"rb");
$content = fread($handle, filesize($filename));
fclose($handle);

$split = explode('*',$content);
echo 'Ce fichier contient '.count($split).' éléments :

';
for ($i=0;$i<count($split);$i++)
    echo 'Block '.$i.' : '.$split[$i].'
';






*****
noisy communication - wherever, be everywhere!
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010
1
Salut,

quelques petites corrections:

$content=
file_get_contents($uploadfile);  // Beaucoup plus rapide que fread (confirmé par la doc php)

$split = explode('*',$content);
echo 'Ce fichier contient '.count($split).' éléments séparé par une étoile:

';
$nbr=
count($split); // Faut jamais mettre un count dans une boucle

for ($i=0;$i<$nbr;$i++)

    echo 'Block '.$i.' : '.$split[$i].'
';







-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
Messages postés
49
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
17 février 2009

Merci pour vos aides , ca marche bien ce script et ca fait exactement ce que je voulais  mais malheureusement je doit proceder autrement maintenant . c'est dire que je n'ai plus de séparateur * dans mon fichier .le delimiteur de chaque block doit être la premiere colonne du fichier csv qui est un identifiant.
pour chaque identifiant je doit lire le block et inserer les resultat dans ma base ansi de suite. si vous avez une idée .Merci de ne pas hesiter
Messages postés
49
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
17 février 2009

Je rexplique mon probleme :
j'ai ce fichier dont la première colonne correspon a un identifiant.:
14366,1,56.9,704,0.411326   
14366,2,56.2,703,0.0322821   
14366,3,57.5,688,0.181508   
14366,4,57.6,687,0.599771   
14366,5,59.1,669,0.274231   
14366,6,60.1,657,0.173746
14360,1,56.9,704,0.411326   
14360,2,56.2,703,0.0322821   
14360,3,57.5,688,0.181508   
14360,4,57.6,687,0.599771   
14360,5,59.1,669,0.274231   
14360,6,60.1,657,0.173746 
14359,1,56.9,704,0.411326   
14359,2,56.2,703,0.0322821   
14359,3,57.5,688,0.181508   
14359,4,57.6,687,0.599771   
14359,5,59.1,669,0.274231   
14359,6,60.1,657,0.173746
14372,1,56.9,704,0.411326   
14372,2,56.2,703,0.0322821   
14372,3,57.5,688,0.181508   
14372,4,57.6,687,0.599771   
14372,5,59.1,669,0.274231   
14372,6,60.1,657,0.173746
Pour chaque identifiant je doit lire toutes les ligne et les  rajouter dans un tableau que je vais traiter apres pour inserer dans ma base.
J'ai essaye de mettre en place le script  ci dessous , peut être pas trop coherent car par manque d'expérience je ne suis pas convaincu de mon algorithme. merci si vous pouvez m'eclaicir.

$row = 1; // initialisation de la 1ère ligne du fichier uploadé
$fp= fopen ($uploadfile,"r"); // ouverture fichier en lecture "r"
$identifiant =null;    
while ($data = fgets ($fp, 4086)){         //$contentfile_get_contents($uploadfile);                                              list($no_analyse_B_ARISA,$numero_de_bande,$intensite_de_la_bande,$taille_de_la_bande,$distance_de_migration) explode(",", $data);
$identifiant=$no_analyse_B_ARISA;                
 echo $identifiant;
 $num = count ($data);
            for($i=0; $i < $num; $i++){
                          if($identifiant == $no_analyse_B_ARISA){
                                    echo "je suis à la ligne numero ".$row."du fichier
";   
                           }else{
                                    echo "Attention l'dentifiant a changer!
";
                            }
                                    
                }
$row++;   
 print_r($data);
 fclose($fp);
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
yoman64 où est-il dit que file_get_contents est plus rapide? Ca m'intéresse! Je n'ai pas trouvé sur http://fr.php.net/file_get_contents...

*****
noisy communication - wherever, be everywhere!
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010
1
Salut,
C'est dans la page de la doc de fread : http://ca.php.net/manual/fr/function.fread.php

Note:

Si vous voulez lire le contenu d'un fichier dans une chaîne de
caractères, utilisez plutôt file_get_contents()
qui est bien plus rapide que le code ci-dessus.


Mais je suggère ce changement surtout parce que je crois que ça fait plus propre de remplacer 3 lignes par une seule fonction qui est faite pour ça :).

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
Messages postés
3
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
6 octobre 2009

bonsoir,moi j'ai plutot un repertoire dans lequel se trouve plusieurs repertoires dont
1.je doit recuperer le nom de chacun des ces répertoires dans un parametre;
2.pour chaque repertoire je doit rechercher, identifier et compter les fichiers de meme type: dont les noms ont en commun une chaine xxxx;
3.ouvrir chaque fichier
4.Identifier et lecture des informations utiles (ici en bleu) avec creation d'une table dont les colonnes sont en rouges:
Name of BSC : AGA
begin date and time : 2009-07-17 11:00
end date and time : 2009-07-17 12:00
LINK_ID C153A C153B C251 C252 C253 C254 C255 C256 C257 C258
16 0 1 0 165 2324 0 0 2353 0 0
144 0 0 0 198 2323 0 0 2313 0 0
272 0 0 0 202 2326 0 0 2309 0 0

5.inserer pour chaque ligne les colonnes suivantes jusqu'à rencontrer une ligne vide:
Name of BSC begin date and time end date and time LINK_ID C153A ... C256

6.sortir du fichier si rencontre ligne vide et ouvrir le prochain fichier. et faire le processus en ajoutant les nouvelles valeurs pour les memes colonnes.

Merci de m'aider à faire un code PHP/Mysql de cet algorithme.
merci d'avance !