Importer txt en fonction des postions des éléments

Résolu
Timwaz Messages postés 23 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 12 mai 2009 - 5 mai 2008 à 14:01
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013 - 5 mai 2008 à 21:19
Lut à tous,

Petit problème. Je dois importer un fichier txt avec coldfusion pour l'injecter dans un fichier Excel ou Access.

J'ai bien trouvé des exemples, mais à chaque fois le fichier contient des données séparées par des points virgules,
espaces ou autres.

Dans mon cas, il s'agit d'un fichier bancaire, où les données ne sont pas séparées par un seul élément mais par un ou plusieurs espaces (de 1 à n). Bref, la seule chose qui est fixe et connue (puisque standardisée) c'est la position du début du champ (par code enregistrement en 1, numérotage en 3, code opération en 9). Le tout pour une longueur d'enregistrement de 240 caractères

Ma question : comment lire dans ce fichier et injecté les données dans en base en fonction de la postion sachant que 
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??> 

, Nom des données

, Pos.

, Long.

, Contenu ou commentaires

, ----
1

, Code enregistrement

, 1

, 2

, = “ 34 ”

, ----
2

, Numérotage

, 3

, 6

, Séquentiel : N° de l’enregistrement précédent + 1

, ----
3

, Code opération

, 9

, 2

, "80" = prélèvement ordinaire

"85" = prélèvement accéléré

"86" = Télérèglement

(un seul type d’opération par séquence (31-39))

, ----
4

, Date de règlement de compensation

, 11

, 6

, JJMMAA

, ----
5

, Devise du fichier

, 17

, 1

, = “ E ”

, ----
6

, Zone réservée

, 18

, 4

, = blancs

, ----
7

, Code établissement de l’émetteur

, 22

, 5

,  

RIB  et raison sociale du client émetteur de l’opération.

, ----
8

, Code guichet de l’émetteur

, 27

, 5

, ----
9

, Numéro de compte de l’émetteur

, 32

, 11

, ----
10

, Nom de l’émetteur

, 43

, 24

,  

, ----
11

, Numéro National Emetteur

, 67

, 6

,  

, ----
12

, Zone réservée

, 73

, 5

, = blancs

, ----
13

, Code établissement du destinataire

, 78

, 5

,  

RIB et raison sociale du client destinataire.

, ----
14

, Code guichet du destinataire

, 83

, 5

, ----
15

, Numéro de compte du destinataire

, 88

, 11

, ----
16

, Nom du destinataire

, 99

, 24

, ----
17

, Référence du présentateur

, 123

, 6

,  

, ----
18

, Libellé abréviatif de domiciliation

, 129

, 24

,  

, ----
19

, Libellé 1, 153

, 32

,  

, ----
20

, Libellé 2

, 185

, 32

,  

, ----
21

, Indicateur balance des paiements

, 217

, 1

, = blancs dans le cas d’un code opération "80" ou "85"

, ----
22

, Code centre bancaire

, 218

, 2

, = blancs dans le cas d’un code opération "80" ou "85"

, ----
23

, Zone réservée

, 220

, 9

, = blancs

, ----
24

, Montant compensé

, 229

, 12

, Montant compensé de l’opération - exprimé en centimes - non signé

Merci par avance

Timwaz

2 réponses

nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
5 mai 2008 à 15:10
Bonjour,

regarde du coté de cfquery, il est possible de définir un fichier txt comme une source de données.
Sinon comme ton fichier est structuré,  ça ne devrait pas trop posé de problèmes pour en extraire chaque éléments.

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
3
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
5 mai 2008 à 21:19
Details en brut vite fait à complèter biensur :
utilise la fonction Mid(string, start, count)



<cffile action="READ" file="votre fichier" variable="fic">
<cfloop list="#fic#" delimiters='#chr(13)##chr(10)#' index="ligne">

Code enregistrement :  <cfoutput>#Mid(ligne, 1, 2)#</cfoutput>

Numerotage : <cfoutput>#Mid(ligne, 3, 6)#</cfoutput>

Code operation : <cfoutput>#Mid(ligne, 9, 2)#</cfoutput>

Date de reglement : <cfoutput>#Mid(ligne, 11, 6)#</cfoutput>

Devise du fichier : <cfoutput>#Mid(ligne, 17, 1)#</cfoutput>

....

</cfloop>

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
3
Rejoignez-nous