Import data fichier txt avec nbr champs variables par ligne

hakari Messages postés 3 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 19 janvier 2004 - 19 janv. 2004 à 16:20
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 - 21 janv. 2004 à 13:36
Bonjour,

Je cherche comment je pourrais à l'aide de CF 5.0 extraire tous les champs d'un enregistrement contenu dans un fichier texte vers un tableau, sachant que chaque ligne d'enregistrement peut contenir un nombre variable de champs :

ex:
date,departement,commune,population,nom_referent_1,tel_referent_1,nom_referent_2,tel_referent_2,
date,departement,commune,population,nom_referent_1,tel_referent_1,nom_referent_2,tel_referent_2,nom_referent_3,tel_referent_3
date,departement,commune,population,nom_referent_1,tel_referent_1,

Je parviens à lire le fichier
<cffile action="READ" file="#expandPath('.')#\\T102.TXT" variable="Message">
<cfoutput>#Message#</cfoutput>

à extraire chaque champ
<cfloop list="#Message#" index="x" delimiters="#chr(44)##chr(13)#"> mais je n'arrive pas gérer le changement de ligne dans mon tableau.

Je voudrais ensuite pouvoir créer deux tables, la table principale avec les données fixes et une table avec les données variables (nom_referent et tel_referent) que je lierai .

Avez-vous déjà été confronté à ce type de problème, avez vous une solution ?

Merci pour votre réponse.

Hakari 8-)

3 réponses

cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
21 janv. 2004 à 13:23
Si tu veux gérer efficacement le changement de lignes, utilise 2 boucles imbriquées : une pour les lignes et une pour les champs

<cfloop list="#message#" index="#lFields#" delimiters="#chr(13)#">
<cfloop list="#lFields#" index="cField">
#cfield#
</cfloop>

</cfloop>

Mais bon... je te le déconseille si ton fichier fait quelques Mo.. tu risque de voir ton script mouliner pal mal, le temps qu'il traite le fichier.

Si je me souviens bien (ça c'est pas sur...), tu peux utiliser les drivers Merant texte ou csv(normalement livré avec CF5) pour lire ton fichier en tant que table ou DB(ça devrait te faire gagner pas mal de temps en cas de gros fichier). Si ta première ligne contient la liste des différents champs, tu ne devrais pas avoir le moindre problème, même si chaque ligne ne possède pas le nombre de colonnes escomptés (je sais que je l'avais fait, mais je sais plus si c'est en utilisant un Driver Merant ou Microsoft ou autre...)
Après tu n'as plus qu'à requeter dessus.
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
21 janv. 2004 à 13:34
Pour la deuxième partie, vois si ton sgbd accepte les insertions multiples, ie quelque chose du genre:

insert into tblReferent(nom_referent,tel_referent)
values ('nom1','tel1'),('nom2','tel2'),('nom3','tel3'),.......

à ce moment là, une boucle bien pensée sur les éléments 5 et plus te permettra de le faire à la volée dans ton script (en insérant des parenthèses et en insérant la chaine générée dans une requete...)

M'enfin.. ce que je te donne n'est pas complet.. c'est juste une base, après faut que tu bosses un peu !!! ;-)
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
21 janv. 2004 à 13:36
Ah oui.. et si tu n'y arrive pas à partir de ça... fais moi signe...
0
Rejoignez-nous