Importer txt en fonction des postions des éléments [Résolu]

Signaler
Messages postés
23
Date d'inscription
lundi 5 mai 2008
Statut
Membre
Dernière intervention
12 mai 2009
-
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013
-
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

Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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