importer un fichier .txt dan une base mysql

Eléphanteau du PHP | 27 Messages

26 mars 2005, 13:02

bonjour, j'ai un fichier texte constitué comme ça :
S 101 30406171533000442228483 00000003000000000 Q000000000000000000000000
S 102 30406171533000442228483 00000003000000000 Q000000000000000000000000
etc...

il y a un retour chariot a chaque ligne, et les information sur chaque lignes sont sépare par des espaces...(par contre il y a plusieurs espaces entres les champs, genre 10 espaces vide)

donc je voudrai importer ce fichier texte dans une base mysql avec un enregistrement pour chaque ligne et chaque groupe d'info correspondant à un champs, ..
et je ne sait pas comment m'y prendre, si quelqu'un pouvais me donner les premiers éléments .
merci

Eléphant du PHP | 413 Messages

29 mars 2005, 16:04

je vois 2 solutions possibles :

1. le script PHP lit chaque ligne du fichier separement :
- il remplace plussieurs espaces par un seul (preg_replace)
- il fait split pour separer chaque champ
- il insere la ligne dans la base mysql en precisant la valeur de chaque champ (INSERT INTO ... VALUES (....))

2. le script PHP
- remplace toute succession d'espaces par un seul espace
- et fait ensuite le chargement du fichier ainsi modifié dans la base mysql, au moyen de l'instruction SQL :
LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet FIELDS TERMINATED BY ' ';
(plus d'info sur LOAD DATA ici :
http://dev.mysql.com/doc/mysql/fr/load-data.html
)

dans la 2eme solution, il faut imperativement remplacer les sequences de plusieurs espaces par un seul espace, sinon LOAD DATA va croire qu'il s'agit d'une succession de champs vides.
--
Goeb

Eléphanteau du PHP | 27 Messages

05 avr. 2005, 14:04

bon, voilà ou j'en suis

<?php
// Lit une page web dans un tableau.
$lines = file ('TaxaPbx.txt');
//supression des espaces en trop
$lines = preg_replace('/\s\s+/', ' ', $lines);
// mise en place du traitement ligne par ligne
foreach ($lines as $line_num => $line) {
//ajout d'une fin de ligne
$line=$line .'<br/>';
$Data=split(" ", $line);
print_r ($Data);
}

?>
c'est le code que j'ai ecris, et ca me donne ca :
Array ( [0] => A201 [1] => ?A00000003T0660909841 [2] => U2303V1126W00000005 [3] =>
) Array ( [0] => A203 [1] => ?A00000003T0660909841 [2] => U2303V1151W00000005 [3] =>
) Array ( [0] => A6 [1] => A00000002T0492434850 [2] => U2303V1224W00000221 [3] =>
) Array ( [0] => A7 [1] => A00000000T0698250288 [2] => U2303V1228W00000015 [3] =>
) Array ( [0] => A6 [1] => A00000000T0442228827 [2] => U2303V1503W00000007 [3] =>
) Array ( [0] => A6 [1] => A00000003T0442228483 [2] => U2303V1602W00000191 [3] =>
) Array ( [0] => A6 [1] => A00000006T0442228483 [2] => U2303V1726W00000427 [3] =>
)

donc maintenant si j'ai bien compris je n'ai plus qu'à attribuer les valeurs du tableau ($variable0 = Array[0], $variable2 = Array[2] etc.. et rajouter une insertion dans ma base de donées c'est ça ?

par contre là jene sait pas comment m'y prendre au niveau du code à ecrire...


//edit//

c'est bon j'ai trouvé, j'ai honte........
Modifié en dernier par latitude le 05 avr. 2005, 17:13, modifié 1 fois.

Eléphant du PHP | 413 Messages

05 avr. 2005, 17:00

oui, c'est quasimment bon. il reste juste à faire l'insertion en base de données :
$Data=split(" ", $line);
just'après cette ligne, tu fais un truc dans ce genre :

Code : Tout sélectionner

$champ1 = $Data[0]; $champ2 = $Data[1]; $champ3 = $Data[2]; $cmd_sql = "INSERT INTO ta_table VALUES ($champ1, $champ2, $champ3);" mysql_query($cmd_sql);
(auparavant il faut avoir fait la connection à la base de donnée (fonction mysql_connect)
--
Goeb

Eléphanteau du PHP | 27 Messages

06 avr. 2005, 09:10

oui, ca marche nickel...je passe à la phase deux de mon problème...
le fichier est situé sur un poste de mon réseau dans un répertoire partagé, pour les tests, j'ai utilisé "move_uploaded_file" pour rapatrier le fichier sur mon serveur pour le traiter.
je faisait ça manuellement avec une page de formulaire avec un champs "file" où je sélectionne mon fichier sur le poste disatant, puis la page de traitement qui me rapatrie le fichier et effectue le traitement en bdd.

problème, je voudrai automatiser ça pour lancer le script automatiquement, hors "move_uploaded_file" à besoins de récupérer la valeur $_file par un post.....y a t'il une autre solution, vu que mon fichier source est toujours au même endroits, je n'arrive pas à marquer le chemin en "dure" dans le code....