Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Remplir des champs identique dans plusieurs fichiers

5 views
Skip to first unread message

chahd1

unread,
Jun 27, 2022, 10:06:06 AM6/27/22
to
Bonjour,

J'ai un programme qui modifie automatiquement des champs déjà définis dans
plusieurs template .text .
Par exemple, dans mon modèle, j'ai défini un champ defclients{#.......#} le code
demande avec quoi je veux le remplacer .
Parfois les substitutions ( les champs ) sont communes entre les différents
fichiers, il est donc inutile qu'il me demande de les remplir plusieurs fois.
comment puis-je résoudre ce problème ?
merci d'avance .
<code>

import os, subprocess, re

def find_occurrences(template_tex):
# Open template.tex
with open(template_tex, "e;e;r"e;e;) as f:
filedata = f.read()

# Find occurrences of {{item}}
return set(re.findall("e;e;#(.*?)#"e;e;, filedata))

def prompt_replacements(occurrences):
replacements = dict()
# Replacing fields
for occurrence in occurrences:
replaceby = input("e;e;Replace "e;e; + occurrence + "e;e; by: "e;e; )
replacements[occurrence] = replaceby
return replacements

def clean_latex_temporary_files(result_tex):
filename_wext = result_tex[:result_tex.rfind("e;e;."e;e;)]
for ext in ["e;e;tex"e;e;, "e;e;aux"e;e;, "e;e;log"e;e;]:
print("e;e;rm"e;e;, filename_wext + "e;e;."e;e; + ext)
os.remove(filename_wext + "e;e;."e;e; + ext)

def compile_latex(result_tex):
# Convert result.tex to result.pdf
proc = subprocess.Popen(["e;e;pdflatex"e;e;,
"e;e;-interaction=nonstopmode"e;e;, result_tex])
proc.communicate()
clean_temporary_files(result_tex)

def make_replaced_latex(template_tex, result_tex, replacements):
# Write results
with open(template_tex, "e;e;r"e;e;) as f:
filedata = f.read()
for (occurrence, replaceby) in replacements.items():
filedata = filedata.replace("e;e;{{"e;e; + occurrence +
"e;e;}}"e;e;, replaceby)
with open(result_tex, "e;e;w"e;e;) as f:
f.write(filedata)

def main():
map_template_result = {
"e;e;template1.tex"e;e; : "e;e;result1.tex"e;e;,
"e;e;template2.tex"e;e; : "e;e;result2.tex"e;e;,
"e;e;template3.tex"e;e; : "e;e;result3.tex"e;e;,
}
occurrences = set()
for template_tex in map_template_result.keys():
occurrences |= find_occurrences(template_tex)
replacements = prompt_replacements(occurrences)
for (template_tex, result_tex) in map_template_result.items():
make_replaced_latex(template_tex, result_tex, replacements)
compile_latex(result_tex)
clean_temporary_files(result_tex)

main()
<code>

Olivier Miakinen

unread,
Jun 28, 2022, 4:39:13 AM6/28/22
to
Bonjour,

Le 27/06/2022 16:06, chahd1 a écrit :
>
> J'ai un programme qui modifie automatiquement des champs déjà définis dans
> plusieurs template .text .
> Par exemple, dans mon modèle, j'ai défini un champ defclients{#.......#} le code
> demande avec quoi je veux le remplacer .
> Parfois les substitutions ( les champs ) sont communes entre les différents
> fichiers, il est donc inutile qu'il me demande de les remplir plusieurs fois.
> comment puis-je résoudre ce problème ?

Ton code est illisible sur usenet, ensemble de groupes de discussion pompé par
le site que tu utilises pour y accéder. En effet, il remplace chaque « " »
par la séquence « "e;e; ».

Je vais recopier ton code en faisant le remplacement inverse afin qu'on puisse
plus facilement comprendre ta question et y répondre. Mais en même temps il
serait bon que l'on puisse signaler le problème au site web, sauf que je ne
sais pas lequel c'est. Du coup, chahd1, est-ce que tu pourrais répondre à mon
article en copicollant l'URL de la page que tu es en train de lire ?

==============================================================================

<code>

import os, subprocess, re

def find_occurrences(template_tex):
# Open template.tex
with open(template_tex, "r") as f:
filedata = f.read()

# Find occurrences of {{item}}
return set(re.findall("#(.*?)#", filedata))

def prompt_replacements(occurrences):
replacements = dict()
# Replacing fields
for occurrence in occurrences:
replaceby = input("Replace " + occurrence + " by: " )
replacements[occurrence] = replaceby
return replacements

def clean_latex_temporary_files(result_tex):
filename_wext = result_tex[:result_tex.rfind(".")]
for ext in ["tex", "aux", "log"]:
print("rm", filename_wext + "." + ext)
os.remove(filename_wext + "." + ext)

def compile_latex(result_tex):
# Convert result.tex to result.pdf
proc = subprocess.Popen(["pdflatex",
"-interaction=nonstopmode", result_tex])
proc.communicate()
clean_temporary_files(result_tex)

def make_replaced_latex(template_tex, result_tex, replacements):
# Write results
with open(template_tex, "r") as f:
filedata = f.read()
for (occurrence, replaceby) in replacements.items():
filedata = filedata.replace("{{" + occurrence +
"}}", replaceby)
with open(result_tex, "w") as f:
f.write(filedata)

def main():
map_template_result = {
"template1.tex" : "result1.tex",
"template2.tex" : "result2.tex",
"template3.tex" : "result3.tex",
}
occurrences = set()
for template_tex in map_template_result.keys():
occurrences |= find_occurrences(template_tex)
replacements = prompt_replacements(occurrences)
for (template_tex, result_tex) in map_template_result.items():
make_replaced_latex(template_tex, result_tex, replacements)
compile_latex(result_tex)
clean_temporary_files(result_tex)

main()
<code>



--
Olivier Miakinen

Olivier Miakinen

unread,
Jun 28, 2022, 8:25:42 PM6/28/22
to
Le 28/06/2022 10:39, je répondais à chahd :
>>
>> J'ai un programme qui modifie automatiquement des champs déjà définis dans
>> plusieurs template .text .
>> Par exemple, dans mon modèle, j'ai défini un champ defclients{#.......#} le code
>> demande avec quoi je veux le remplacer .
>> Parfois les substitutions ( les champs ) sont communes entre les différents
>> fichiers, il est donc inutile qu'il me demande de les remplir plusieurs fois.
>> comment puis-je résoudre ce problème ?

D'après ton code (une fois virés les caractères en trop − n'oublie pas de nous
dire quel site web fait cela), lorsque tu poses la question des remplacements
c'est sur un type set() appelé occurrences. Il ne devrait donc pas y avoir de
doublons, par le principe même de ce qu'est un ensemble.

Par conséquent je ne comprends pas quel problème tu rencontres en réalité.


--
Olivier Miakinen
0 new messages