Lecture de fichier text avec php

Fermé
mimir87uk Messages postés 20 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 5 juin 2012 - 9 juin 2009 à 21:17
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 18 juin 2009 à 20:21
Bonjour,
je voudrais savoir comment un fichier text en PHP qui est divisé en champs, donc je ve lire les champs pour remplir ma base de donnée(MySQL). notant que j'ai pa besoin de tous les champs , et il y a des espace entre les champs dans le fichier.

mon fichier txt est comme ça:

CTN_CDR 200051SSC 024877444 20051120180208 054187785 BMDS7A WTA161D 00003600 00000475
CTN_CDR 200051SSC 021222927 20051120180323 071294410 AINN7A OTA161D 00003601 00000475
CTN_CDR 200051SSC 029348197 20051120180601 077778061 GHARD7A OTA161D 00003583 00000473
CTN_CDR 200051SSC 029871689 20051120180817 079070147 GHARD7A OTA161D 00003601 00000475
CTN_CDR 200051SSC 029350264 20051120181002 077267367 GHARD7A OTA161D 00003601 00000475
CTN_CDR 200051SSC 029712520 20051120181111 050787837 OURGL7A WTA161D 00003152 00000416
A voir également:

13 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 juin 2009 à 22:59
tu lis ton fichier text par la fonction file() de php pas besoin de fopen et fclose
le resultat est mis dans un array ligne par ligne

$array_fichier=file(ton_fichier.txt);


//tu fais ta connexion à la base 

//puis ensuite tu explore cet array ligne par ligne
for($i=1;$i<=sizeof($array_fichier);$i++0){

array_champs=explode(" ",$$array_fichier); //on explode par rapport à l'espace tu obtiens un array ou les champs sont séparés

$sql="INSERT INTO ta_table VALUES('".array_champs[0]."','".array_champs[1]."' etc........);
mysql_query($sql);

}

0
mimir87uk Messages postés 20 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 5 juin 2012
10 juin 2009 à 13:56
ça pas marcher, est ce qu'il y a une autre idé ?
0
jeremieca Messages postés 178 Date d'inscription lundi 9 juillet 2007 Statut Membre Dernière intervention 16 mars 2015 28
10 juin 2009 à 14:01
Si ça doit marcher tu as mis quel code ?

+
0
jeremieca Messages postés 178 Date d'inscription lundi 9 juillet 2007 Statut Membre Dernière intervention 16 mars 2015 28
10 juin 2009 à 14:17
<?php
$array_fichier = file("txt.txt");

for($i=0; $i+1 <= sizeof($array_fichier); $i++){

$array_champs = explode(" ", $array_fichier[$i]);


echo $array_champs[0]."<br>";
echo $array_champs[1]."<br>";
echo $array_champs[2]."<br>";
echo $array_champs[3]."<br>";
echo $array_champs[4]."<br>";
echo $array_champs[5]."<br>";
echo $array_champs[6]."<br>";
echo $array_champs[7]."<br>";
echo $array_champs[8]."<br><br><br>";


}

?>

Voila ça ça marche !

PS : Remplace les echo() par un INSERT sql.

Amicalement, JC.
0
mimir87uk Messages postés 20 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 5 juin 2012
10 juin 2009 à 19:12
je pense le problem que dans les lignes le vide entre les champs n'est pa fix dans mon fichier, des fois 3 blanc des fois 4 des fois 7 ....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 juin 2009 à 22:28
ça ne marche pas ne veut rien dire !

voilà une solution qui fonctionne qq soit le nombre d'espoace séparateurs

<?php
$array_fichier = file("ton_fichier_txt.txt"); //attention mettre le chemin relatif de ton fichier par rapport a ce script php

for($i=0; $i<sizeof($array_fichier); $i++){

$array_champs = preg_split("/[\s]+/", $array_fichier[$i]);

//verification
echo $array_champs[0]."<br>";
echo $array_champs[1]."<br>";
echo $array_champs[2]."<br>";
echo $array_champs[3]."<br>";
echo $array_champs[4]."<br>";
echo $array_champs[5]."<br>";
echo $array_champs[6]."<br>";
echo $array_champs[7]."<br>";
echo $array_champs[8]."<br><br><br>";

//comme te l'a dit jeremieca il te suffit de mettre tes INSERT dans ta table à la place des echo

}

?>
0
mimir87uk Messages postés 20 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 5 juin 2012
11 juin 2009 à 13:05
merci bcp, ça marche comme ça,
maintenent j'ai un champs dans ma table qui doit prendre le numero de chaque ligne,

par exemple 1 pour la ligne numero 1

c'est à dire je veut metre auto_increment pour ce champs

et merci d'avance
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 juin 2009 à 14:03
tu mets ton champ numero en INT (3) autoincrement au moment ou tu cree ta table

et qd tu fais ton insert tu fais VALUE('',' etc...

c'est a dire que tu ne mets pas de valeur pour le champ numero, juste ''
0
mimir87uk Messages postés 20 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 5 juin 2012
15 juin 2009 à 12:47
bonjour

$array_fichier = file("fp.txt");

comment metre le fichier que je choisi avec le bouton parcourir dans cette instruction, c'est à dire au lieu de metre file("fp.txt"), je veu metre le fichier choisi avec le bouton parcourir


j'ai met
<form method='post' action='lecture.php' encrypte='multipart/form-data'>
<input type='file' name='fichier'>
<input type='submit' value='envoyer'>
</form>

la page lecture.php qui va lire mon fichier pour insérie les données dans ma base de données
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 juin 2009 à 15:28
<form method='post' action='lecture.php' encrypte='multipart/form-data'>
<input type='file' name='fichier'>
<input type='submit' value='envoyer'>
</form>


attention ce formulaire te permet de parcourir un fichier sur ton PC, tu peux récupérer le nom du fichier par la variable globale $_FILES:

$_FILES['fichier']['name']

MAIS ton script php ne peut travailler qu'avec un fichier qui est PRESENT sur le serveur hors ton fichier sera encore sur ton PC donc la fonction file() ne pourra pas le lire

alors soit ton serveur est "local" sur ton PC c a d Wamp ou easyPhp auquel cas ce serait possible

soit tu transfert d'abord tes fichiers sur le serveur et par ton script php tu explore le dossier dans lequel tu les as mis vas voir readdrir() ce qui te generara une liste

cette liste remplacera l'input type="file"

En résumé:

tu transferes tes fichiers sur le serveur en ftp dans un dossier "fichiers_a_traiter" par exemple

tu fais une première page de choix du fichier à traiter avec:

<form method="post" action="lecture.php">

<select name="fichier" >
<?php
$rep_fichiers="fichiers_a_traiter"; //tu changes si tu n'as pas nommé ainsi ton dossier
//generation de la liste des fichiers
if ($handle = opendir($rep_fichiers)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") { // on ne tient pas compte des fichiers . et .. 
            echo '<option value="'.$file.'">'.$file.'</option>';
        }
    }
    closedir($handle);
}
?>
</select>
<input type='submit' name="envoyer" value='Envoyer'>
</form>

et le script lecture.php:

<?php
if(isset($_POST['envoyer'])) {
	$fichier=$_POST['fichier']; //recupération du choix dans la liste
	
	$array_fichier=file($fichier);
	
	//etc....la  tu fais ton traitement vers la BDD
}
?>
0
mimir87uk Messages postés 20 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 5 juin 2012
16 juin 2009 à 23:01
merci bcp ça marché ,

maintenent quand j'ai met AUTO_INCREMENT dans l'identifiant de la table, la première insertion des données a été bien il incrémente de '1' jusqu'à 'n' la ligne derniere, aprés j'ai éfacé les donnée donc dans la 2 insertion des données il commance d'incrementer de 'n' , comment remetre AUTO_INCREMENT a 0
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 juin 2009 à 23:05
il ne faut pas effacer les donnees une par une mais par phpmyadmin faire un TRUNCATE de ta table (Vider)
0
mimir87uk Messages postés 20 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 5 juin 2012
16 juin 2009 à 23:08
mais je travail pas avec phpmyadmin , je travail dans linux avec mysql , php , apache
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 juin 2009 à 20:21
alors installes aussi phpmyadmin sous linux tu verra cela te permet d'intervenir sur ta base Mysql pour gérer tes tables
0