Version complète: sur le forum Webmaster Hub : Insérer fichier.txt dans Mysql
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
michmuch51
Bonjour le hub,

j'ai actuellement un fichier texte avec plusieurs définitions du genre:

Monmot: monmot est issu du latin momot...
Mondeuxiememot: issu du deuxieme mot de momot en latin, mondeuxiememot est....exemple: ninin mondeuxiememot

et donc toutes mes definitions sont dans un fichier txt avec apres chaque définition un retour à la ligne et deux petits point apres le mot à définir, le seul pb c'est que de temps en temps dans le descriptif on retrouve ":" également (du genre "exemple:")

Vous l'aurez compris, je souhaite transférer ce fichier txt dans une bdd définie lemot + la def donc un tableau tout bete avec 3 cellules: id avec auto_increment puis lemot dans la deuxieme et dans la dernière definition

Merci pour votre aide smile.gif

Michmuch

edit: j'espere que j'ai été clair car en me relisant je vois que c'est un peu le fouilli (n'hésitez pas à me le faire savoir si vous ne comprenez rien à ma demande laugh.gif )
psylock
faut lire ton fichier caractère par caractère jusqu'a ce que tu rencontres le premier ":"
la tu remplis tes champs "id" et "mot" dans ta base
t'as plus qu'a mettre ensuite le reste (ce qui suit les ":") dans ton champ definition
j'espere que j'ai bien compris ton probleme.

exemple: http://www.nexen.net/index.php?option=com_...ction.fgetc.php
xou
hello,

Regarde plutôt du côté de: LOAD DATA INFILE wink.gif
psylock
ok pour l'efficacite mais dans ce cas j vois pas en quoi ca resout son probleme de ":"...
michmuch51
oui en effet moi ce que je cherche c'est plus les fonctions pour pouvoir justement retrouver ces ":" et ensuite insérer le tout en bdd.

mais je vais essauyer de me débrouiller, je vous renvois la soluce dès que je la trouve (va falloir être patient) tongue.gif
xou
la solution est d'échapper tes caractères dans le texte.
Spidetra
CITATION(psylock @ samedi 20 mai 2006, 14h14)
ok pour l'efficacite mais dans ce cas j vois pas en quoi ca resout son probleme de ":"...
*


http://dev.mysql.com/doc/refman/5.1/en/load-data.html
SQL
FIELDS TERMINATED BY ':'


ça ne resout pas le pb ?
psylock
désolé mais je saisi pas ou on peut définir qu'il faut prendre en compte le premier ":" (celui qui separe le mot de se définition) et pas ceux contenu dans la définition. j comprend bien, me semble t il, l'utilité de load data infile.

mettons j'ai un fichier test.txt comprenant 3 lignes:

mot 1 : premiere definition
mot 2 : ma seconde definiton : contient un deux points
mot 3 : troisieme definition

si on fait ca ?

load data infile 'test.txt' into table ma_table fileds terminated ':'

ca donne ca la table au final
ligne1 mot 1 premiere definition
ligne2 mot 2 ma seconde definiton
ligne3 mot 3 troisieme definition

et il y a donc un morceau de la seconde définition qui disparait...

je vois pas ta technique la :-/
xou
Bonjour,

Effectivement, son problème vient des caractères présents dans le fichier texte et pour celà il n'y a pas de solution miracle:

- soit les champs sont bien délimittés (' ou "), séparés (par une virgule), et terminés (par ; ) et les caractères spéciaux du contenu de chaque champ échappés correctement
- soit on peut rattrapper celà comme tu dis Psylock mais seulement si on peut créer des algorithmes permettant de différencier le contenu, des éléments de délimittation (autant dire que c'est rare que le contenu le permette)
- soit on l'as dans le c**

LOAD DATA INFILE n'est pas une fonction magique, elle ne pourra traiter que des données formattées correctemment, et un algo PHP ne saura pas en faire d'avantage.
Spidetra
autant pour moi....
je n'avais pas vu que le délimiteur de champ était aussi présent dans le texte.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.