extraire une partie d'un document rtf
bonjour,
voila mon environnement est comme suit :
devsuite 10g (904019)
oas 10g (9042)
database 9207
j'ai un document type qui est une lettre qu'on doit envoyer à chacun de nos client.
ce document est constitué de 2 parties:
partie a : date du jour, nom du client
partie b : lette elle même
Je voudrais construire de facon dynamique un fichier contenant autant de pages que de client et chaque page devra avoir :
- partie a : info du client concerné
- partie b: lettre (prototype)
pour ce faire, j'ai delimite ma partie de la lettre (section répetetive avec des crochet).
et la pour chaque client :
- j'inserer son nom
- j'insere la partie répetetive (prototype) de ma lettre template
- j'insere un saut de page
tout les client sont dans le même fichier output , on les separent avec un saut de page.
voici mon code, mais ca me donne toujour en output un document vide :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| DECLARE
-- directory for template document
c_template_dir VARCHAR2(300) := 'D:\RTM\AVIS_RETARD\TEMPLATE';
-- template document name
c_template_doc VARCHAR2(300) := 'LETTRE_RETARD.rtf';
-- directory for output
c_output_dir VARCHAR2(300) := 'D:\RTM\AVIS_RETARD\A_FAXER';
-- FichierIntrouvable EXCEPTION;
-- PRAGMA exception_init ( FichierIntrouvable, -302000 );-
outFileName VARCHAR2(200);
Load_File text_io.file_type;
Out_file text_io.file_type;
Str VARCHAR2(32767) := Null;
counter NUMBER :=0;
--INDICE NUMBER;
ligne_en_cours VARCHAR2(32767) := Null;
lettre_repetitive long;
BEGIN
-- source file
Load_File := text_io.fopen( c_template_dir ||'\'||c_template_doc,'r' );
outFileName := 'LOT_DATEJOUR'||'.rtf';
Out_file := text_io.fopen(c_output_dir||'\'||outFileName,'w' );
-- se positionner apres le début de la section
--RÉCUPERER LE DOCUMENT À REPÉTER POUR CHAQUE NOTAIRE
text_io.get_line( Load_File, ligne_en_cours);
while ligne_en_cours <> '[['
loop
text_io.get_line( Load_File, ligne_en_cours);
end loop;
text_io.get_line( Load_File, ligne_en_cours);
while ligne_en_cours <> ']]'
loop
text_io.get_line( Load_File, ligne_en_cours);
lettre_repetitive := ligne_en_cours;
text_io.put_line( Out_file, lettre_repetitive );
end loop;
--inserer le saut de page
text_io.get_line( Load_File, STR);
Str := REPLACE( Str, '[sautpage]', '\par \page');
text_io.put_line( Out_file, Str );
/*
EXCEPTION WHEN NO_DATA_FOUND THEN
text_io.fclose( Load_File );
text_io.fclose( Out_file );
END; |
et voici mon template (lettre prototype) :
date du jour
info client
---
Citation:
[[
Bonjour,
cette lettre est pour vous informer que vous êtes en retard pour la période en cours.
Merci pour mettre à jour votre dossier.
salutations
]]
[sautpage]
merci pour votre aide et toute suggestion est la bienvenue
extraire une partie d'un document rtf
Bonjour,
j'ai fait des trace et je vois bien les lignes de mon document mais mon output est tjrs vide
merci
manipulation d'un fichier rtf
j'ai modifié mon code comme suit mais ca le output est tjrs vide.
comment surpasser les lignes vides ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| DECLARE
-- directory for template document
c_template_dir VARCHAR2(300) := 'D:\RTM\AVIS_RETARD\TEMPLATE';
-- template document name
c_template_doc VARCHAR2(300) := 'LETTRE_RETARD.rtf';
-- directory for output
c_output_dir VARCHAR2(300) := 'D:\RTM\AVIS_RETARD\A_FAXER';
-- FichierIntrouvable EXCEPTION;
-- PRAGMA exception_init ( FichierIntrouvable, -302000 );-
outFileName VARCHAR2(200);
Load_File text_io.file_type;
Out_file text_io.file_type;
Str VARCHAR2(32767) := Null;
ind_debsec varchar2(20) := '[[';
ind_finsec varchar2(20) := ']]';
debsec number;
finsec number;
--counter NUMBER :=0;
BEGIN
-- source file
Load_File := text_io.fopen( c_template_dir ||'\'||c_template_doc,'r' );
outFileName := 'LOT_DATEJOUR'||'.rtf';
Out_file := text_io.fopen(c_output_dir||'\'||outFileName,'w' );
text_io.get_line( Load_File, Str );
debsec := instr(Str, ind_debsec, 1,1);
while (debsec=0)
loop
text_io.get_line( Load_File, Str );
debsec := instr(Str, ind_debsec, 1,1);
end loop;
text_io.get_line( Load_File, Str );
finsec := instr(Str, ind_finsec, 1,1);
while (finsec=0)
loop
text_io.get_line( Load_File, Str );
text_io.put_line( Out_file, Str );
finsec := instr(Str, ind_finsec, 1,1);
end loop;
/*WHILE ( TRUE )
LOOP
text_io.get_line( Load_File, Str );
--[finpage] c'est là que je veut inserer mon saut de page
Str := REPLACE( Str, '[FAX]', '\par \page');
text_io.put_line( Out_file, Str );
--counter := counter +1;
END LOOP; */
EXCEPTION WHEN NO_DATA_FOUND THEN
text_io.fclose( Load_File );
text_io.fclose( Out_file );
END; |
merci.
manipulation d'un fichier rtf
ca ne marche toujours pas
voici mon document template modifié :
- le 06.01.2006
exemple de lettre
|debsec|
Bonjour,
cette lettre est pour vous informer que vous êtes en retard pour la période en cours.
Merci pour mettre à jour votre dossier.
salutations
|finsec|
merci
|sautpage|
et voici mon output qui :
1 - insere tout le document
2- le debsec est en double
Citation:
le 06.01.2006
exemple de lettre
|debsec|
|debsec|
Bonjour,
cette lettre est pour vous informer que vous êtes en retard pour la période en cours.
Merci pour mettre à jour votre dossier.
salutations
|finsec|
merci
|sautpage|
et voici mon code, je n'arrive pas à trouver ou est le bug ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
DECLARE
-- directory for template document
c_template_dir VARCHAR2(300) := 'D:\RTM\AVIS_RETARD\TEMPLATE';
-- template document name
c_template_doc VARCHAR2(300) := 'TEMPLATE_TEST.rtf';
-- c_template_doc VARCHAR2(300) := 'lettre_retard.rtf';
-- directory for output
c_output_dir VARCHAR2(300) := 'D:\RTM\AVIS_RETARD\A_FAXER';
outFileName VARCHAR2(200);
Load_File text_io.file_type;
Out_file text_io.file_type;
ind_debsec varchar2(20) := '|debsec|';
ind_finsec varchar2(20) := '|finsec|';
ind_sautpage varchar2(20) := '|sautpage|';
debsec number;
finsec number;
sautpage number;
v_part NUMBER := 0;
v_ligne VARCHAR2(32767) := Null;
BEGIN
Load_File := text_io.fopen( c_template_dir ||'\'||c_template_doc,'r' );
outFileName := 'LOT_DATEJOUR'||'.rtf';
Out_file := text_io.fopen(c_output_dir||'\'||outFileName,'w' );
IF TEXT_IO.IS_OPEN(Load_file )
AND TEXT_IO.IS_OPEN(Out_file )
THEN
WHILE (TRUE) LOOP
TEXT_IO.GET_LINE(Load_file, v_ligne);
debsec := instr(nvl(v_ligne, 'X'), ind_debsec, 1,1);
finsec := instr(nvl(v_ligne, 'X'), ind_finsec, 1,1);
sautpage := instr(nvl(v_ligne, 'X'), ind_sautpage, 1,1);
IF v_part = 0 AND debsec <> 0
THEN
v_part := 1;
END IF;
IF v_part = 1 AND finsec <> 0
THEN
v_part := 2;
END IF;
IF v_part = 1 AND finsec = 0
THEN
TEXT_IO.PUT_LINE(Out_file, v_ligne);
END IF;
IF v_part = 2 AND v_ligne = '|sautpage|'
THEN
TEXT_IO.PUT_LINE(Out_file, '\par \page');
END IF;
TEXT_IO.PUT_LINE(Out_file, v_ligne);
END LOOP;
text_io.fclose(Load_file);
text_io.fclose(Out_file);
END IF;
end; |
toute aide est precieuse
merci pour tous