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é :
Si je mets les deux instructions write() en commentaires, le programme fonctionne (sur la console et sur ODI).
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 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
Partager