Bonjour,
J'aurai besoin de votre aide : j'ai un programme Jython qui copie les données d'un fichier source vers un fichier cible.

Quand je teste sur la console dans ODI/Bin/Jython.bat, tout va bien les données de ma source se copient bien dans mon fichier cible.

Quand je lance mon traitement ODI qui reprend la même syntaxe que celle lancée dans la console (en dehors du remplacement des variables par les valeurs fixes), j'ai l'erreur suivante :
org.apache.bsf.BSFException: exception from Jython: Traceback (innermost last):

File "<string>", line 23, in ?

IOError: Descripteur non valide

at org.apache.bsf.engines.jython.JythonEngine.exec(Unknown Source)

at com.sunopsis.dwg.codeinterpretor.k.a(k.java)

at com.sunopsis.dwg.dbobj.SnpSessTaskSql.scripting(SnpSessTaskSql.java)

at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)

at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)

at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)

at com.sunopsis.dwg.dbobj.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.java)

at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)

at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)

at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)

at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)

at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)

at com.sunopsis.dwg.cmd.e.i(e.java)

at com.sunopsis.dwg.cmd.h.y(h.java)

at com.sunopsis.dwg.cmd.e.run(e.java)

at java.lang.Thread.run(Unknown Source)

Voici le programme que j'ai constitué :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import os.path
import string
import urllib
import java.lang as lang
fichierSrc = ‘\\\Fras15\chargements$\ID\ODI\EchangeEmailing\Export\Bounces\Bounces-20120104T140205Z-Prospect-3+janv.+2012.csv’
NomFichierTrg = 'ODIFILE.csv'
nomFTrg = os.path.basename(fichierSrc)
entete='TYPE;MSG_SCHED_DATE;MSG_NAME;MSG_PK;CAMPAGNE_DT'
titre=nomFTrg[0:len(nomFTrg)-4]
texte=urllib.unquote(titre.replace('-',';'))
Tmap = ''.join(map(string.strip,texte))
chemin = ‘\\\Fras15\chargements$\ID\ODI\EchangeEmailing\Export’
fichierTrg =chemin + '\\systeme\\' + NomFichierTrg
fileSrc = open(fichierSrc ,'r')
fileTrg = open(fichierTrg, 'w')
line1=fileSrc.readline()
line2=line1.replace('\n',';')
fileTrg.write(line2 + entete + '\n')
for line in fileSrc.readlines() :
newline = line.replace('\n',';')
fileTrg.write(str(newline) + str(Tmap) + '\n')
 
fileTrg.close()
fileSrc.close()
Si je mets les deux instructions write() en commentaires, le programme fonctionne (sur la console et sur ODI).
Si je mets l'instruction fileTrg.close() en commentaire, cela fonctionne mais mon fichier cible n'est pas fermé et est donc vide (il me semble que l'enregistrement se fait à la fermeture).


Merci d'avance de votre aide.
Elodie