Bonjour chers membres,
S'il vous plaît, comment créer et ouvrir un fichier Latex à partir d'un Script Perl?
Veuillez bien m'aider !
Bonjour chers membres,
S'il vous plaît, comment créer et ouvrir un fichier Latex à partir d'un Script Perl?
Veuillez bien m'aider !
**************************************************************************************************************************************************************
L'avenir est dans le numérique.
**********************************************************
Bonjour,
tu n'expliques pas ce que cherches à faire et ta question est beaucoup trop vague.
Il existe sur le CPAN un certain nombre de modules Perl dédiés au LaTeX (par exemple https://metacpan.org/pod/distributio...s/latex-encode pour transformer des caractères UTF8 inhabituels en code LaTeX, ou https://metacpan.org/pod/Template::Latex). Fais une recherche avec les mots clefs "cpan" et "latex", tu trouveras peut-être ce que cherches.
Si tu as besoin de plus d'aide, précise ce que tu cherches à faire.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Merci cher Moderateur pour votre solution,
En effet, je voulais écrire un script pour créer un fichier tex et ouvrir ensuite.
Voici un exemple de code que je trouve mais cela ne marche pas. Mon objectif est de stocker dans un fichier ".pl".
Pouvez vous apprécier où se trouve mon erreur?
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 use strict; use warnings; # Put the file name in a string variable # so we can use it both to open the file # and to refer to in an error message # if needed. my $file = "temp.tex"; # Use the open() function to open the file. unless(open FILE, $file) { # Die with error message # if we can't open it. die "\nUnable to open $file\n"; } # close the file. close FILE;
**************************************************************************************************************************************************************
L'avenir est dans le numérique.
**********************************************************
Bonsoir,
ton code devrait fonctionner, en ce sens qu'il doit ouvrir le fichier temp.tex s'il existe (ou sortir en erreur si le fichier n'existe pas), puis refermer le fichier s'il a pu être ouvert. Mais ton code ne fait rien d'utile dans la mesure où il se contente d'ouvrir le fichier puis de le refermer, sans même lire son contenu ni y écrire de nouveau contenu.
Je ne sais toujours pas vraiment ce que tu cherches à faire.
Quoi qu'il en soit, la syntaxe utilisée pour ouvrir, que tu as sans doute trouvée sur Internet, date d'une bonne vingtaine d'années et n'est plus recommandée aujourd'hui, même si elle continue à fonctionner.
La syntaxe recommandée aujourd'hui pour ouvrir un fichier en lecture est la suivante:
Et pour ouvrir un fichier en mode écriture:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 my $file = "temp.tex"; open my $FILE, "<", $file or die "Unable to open $file $!"; # "<" indique une ouverture en mode lecture; $! contient l'erreur renvoyée par le système d'exploitation en cas d'échec de l'ouverture # Ici ajouter les instructions pour lire le contenu, par exemple, cette boucle de lecture des lignes du fichier: while (my $line = <$FILE>) { # lit le fichier $FILE ligne à ligne print $line; # ici, on se contente d'afficher à l'écran les lignes lues une par une dans le fichier } close $FILE;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 my $file = "temp.tex"; open my $FILE, ">", $file or die "Unable to open $file $!"; # ">" indique une ouverture en mode écriture # Ici ajouter les instructions pour écrire quelque chose dans le fichier, par exemple: print $FILE "Hello world\n"; # ici, on écrit juste une ligne dans le fichier $FILE close $FILE;
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Merci cher Modérateur pour votre réponse,
En effet, je voulais stocker les résultats d'un fichier .txt dans un fichier Latex. Ainsi, je veux d'abord créer le fichier latex nommé "tablenew.tex", ensuite l'ouvrir avec open. Mon problème est comment créer un fichier Latex inexistant et l'ouvrir ensuite avec open dans la ligne suivante?.
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 #!/usr/bin/perl -w open(WRITE,">$tablenew.tex"); open(LOG,"$table.txt"); while ($line=<LOG>) { $line=~s/{smcl}|{com}|{sf}|{ul off}|{res}//g; $line=~s/\& {\\ //g; chop($line); $pos=index($line,">"); if ($pos==1) { $line=~s/> //; print WRITE ("$line"); } else { print WRITE ("\n$line"); } }
**************************************************************************************************************************************************************
L'avenir est dans le numérique.
**********************************************************
Si tu ouvres un fichier en mode écriture, il sera automatiquement créé à vide (et s'il y avait dans le répertoire un fichier portant le même nom, le contenu sera effacé et un nouveau fichier créé à vide).
Je te conseille vraiment d'utiliser la syntaxe que j'ai montrée, elle est plus propre et plus sûre.
Dons de réécrire ton code comme suit:
Un dernier point: le compilateur se moque d'une indentation correcte de ton code, mais l'être humain qui lit le code non. Une bonne indentation n'est pas du tout facultative.
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 #!/usr/bin/perl use strict; # aide Perl à t'aider: Perl détectera beaucoup d'erreurs éventuelles use warnings; # aide Perl à t'aider: Perl détectera beaucoup d'erreurs éventuelles my $file_out = "tablenew.tex"; open my $WRITE,">", $file_out or die "Ouverture impossible de $file_out $!"; my $file_in = "table.txt"; open my $LOG,"<", $file_in or die "Ouverture impossible de $file_in $!"; while (my $line = <LOG>) { $line =~ s/{smcl}|{com}|{sf}|{ul off}|{res}//g; # j'ai des doutes sur tes expressions régulières mais ne peux en rien dire sans en connaître précisément le but $line =~ s /\& {\\ //g; # idem sur la regex chomp $line; # parenthèses inutiles $pos = index $line, ">"; # parenthèses inutiles if ($pos == 1) { $line =~ s/> //; print $WRITE "$line"; # probable que tu veuilles en fait "line\n" pour avoir un retour à la ligne } else { print $WRITE "\n$line"; # idem: tu veux sans doute "\n$line\n"; } }
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Merci cher Moderateur pour votre réponse et le temps vous m'accordiez,
En effet, veuillez bien trouver ci-joint le fichier ".txt" que je voulais ouvrir dans Latex. Dans un premier temps, il faut que je supprime
cette ligne du fichier .txt : {smcl}{com}{sf}{ul off}{res}. Ensuite, prends les éléments du fichier .txt comme input de mon fichier Latex qui doit porter le même nom que "$tablenew.tex". Le fait qu'il y ait $ devant les noms des fichiers .txt et .latex est lié au fait que ce sont des macro globales que j'avais définie dans le Logiciel Stata. Ainsi, je fais appel au fichier perl dans le do file afin d'afficher les résultats.
J'ai exécuté le code précédent mais cela ne marche toujours pas,
Svp, regardez le fichier .txt ci-joint lTableWDI1.txt
Merci pour ton aide,
**************************************************************************************************************************************************************
L'avenir est dans le numérique.
**********************************************************
Bonjour,
franchement, à ta place, j'éviterais des $ et autres signes non-alphanumériques dans tes noms de fichiers, ça pose toutes sortes de problèmes (non spécifiques à Perl), y compris au niveau du système d'exploitation. Cela dit, dans un programme Perl, il suffit de de mettre les noms de fichiers entre apostrophes (au lieu de guillemets) pour que ça fonctionne tout de même malgré ces $.
Voici mon programme précédent légèrement modifié pour ces noms de fichiers non orthodoxes:
A l'exécution, cela crée un fichier nommé $tablenew.tex ayant le contenu suivant:
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 #!/usr/bin/perl use strict; # aide Perl à t'aider: Perl détectera beaucoup d'erreurs éventuelles use warnings; # aide Perl à t'aider: Perl détectera beaucoup d'erreurs éventuelles my $file_out = '$tablenew.tex'; open my $WRITE,">", $file_out or die "Ouverture impossible de $file_out $!"; my $file_in = '$TableWDI1.txt'; open my $LOG,"<", $file_in or die "Ouverture impossible de $file_in $!"; while (my $line = <$LOG>) { chomp $line; $line =~ s/{smcl}|{com}|{sf}|{ul off}|{res}//g; $line =~ s /\& {\\ //g; # pas sûr de ce que doit faire cette regex, pour l'instant elle ne fait sans doute rien my $pos = index $line, ">"; if ($pos == 1) { # il n'y a pas de ligne commençant par > dans ton fichier en entrée, donc le if qui suit n'est jamais exécuté (on ira toujours dans le else) $line =~ s/> //; print $WRITE "$line"; } else { print $WRITE "\n$line"; } }
Code LaTeX : 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
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 $ cat '$tablenew.tex' \documentclass[10pt]{report} \pagestyle{plain} \setlength{\topmargin}{-.25in} \setlength{\textheight}{8.5in} \setlength{\oddsidemargin}{0in} \setlength{\evensidemargin}{0in} \setlength{\textwidth}{6.5in} \usepackage{geometry} \geometry{right=1in,left=0.5in,top=1in,bottom=1in} \begin{document} \begin{center} \setlength{\baselineskip}{14pt} \begin{tabular}{|l|cccccccccc|} \hline\hline \multicolumn{11}{|c|}{} \\ [-.15in] \multicolumn{11}{|c|}{\bf Quality-of-Life Indicators, National Accounts and Survey Means} \\ [.04in] \hline & (1) & (2) & (3) & (4) & (5) & (6) & (7) & (8) & (9) & (10) \\ [.04in] \hline\hline & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & Log Lights & Log Life & Neg. Log & Neg. Log & Neg. Log & Log Frac & Log Frac & Log Frac & Log Frac & Log Female \\ & per capita & Expectancy & Fertility & Adolesc. Fertil. & Food Deficit & Pregnant & Access & Access & Primary & Literacy \\ & & Years & per 100,000 & per 100,000 & per capita & Anemic & Sanitation & Safe Water & School & Rate \\ \hline\hline \multicolumn{11}{|c|}{\it QOL Measure on National Accounts and Survey Means: No Fixed Effects} \\ [.04in] \hline\hline & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & { 1.020***} & { .064***} & { .371***} & { .521***} & { 1.033***} & { .125***} & { .405***} & { .137***} & { .059*} & { .215**} \\ & (.129) & (.017) & (.087) & (.140) & (.259) & (.037) & (.084) & (.035) & (.032) & (.098) \\ & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] Log Survey Mean Income & { .184} & { .060***} & { .034} & { -.154} & { -.132} & { .086*} & { .141*} & { .075*} & { .028} & { .207*} \\ & (.135) & (.021) & (.101) & (.176) & (.287) & (.044) & (.081) & (.039) & (.030) & (.119) \\ & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] R2 & .73 & .58 & .50 & .24 & .45 & .46 & .56 & .55 & .14 & .59 \\ \hline\hline \multicolumn{11}{|c|}{\it QOL Measure on National Accounts and Survey Means: Country Fixed Effects} \\ [.04in] \hline\hline & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & { .593***} & { .081***} & { .215***} & { .516***} & { .522**} & { .244***} & { .229***} & { .137***} & { .084**} & { .211***} \\ & (.120) & (.011) & (.051) & (.085) & (.203) & (.040) & (.069) & (.036) & (.038) & (.063) \\ & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] Log Survey Mean Income & { -.049} & { .004} & { -.014} & { -.011} & { .366**} & { .039} & { .050} & { .033} & { .022} & { -.015} \\ & (.086) & (.009) & (.043) & (.056) & (.161) & (.028) & (.036) & (.023) & (.036) & (.043) \\ & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] R2 & .21 & .28 & .14 & .38 & .18 & .44 & .20 & .21 & .04 & .26 \\ \hline\hline \multicolumn{11}{|c|}{\it National Accounts-Survey Means Differential on QOL Measure: No Fixed Effects} \\ [.04in] \hline\hline & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] Log QOL Measure & { .138***} & { .871***} & { .291***} & { .174***} & { .125***} & { .428***} & { .222***} & { .522***} & { .352***} & { .358***} \\ & (.018) & (.212) & (.059) & (.036) & (.022) & (.099) & (.037) & (.110) & (.102) & (.071) \\ & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] R2 & .19 & .08 & .14 & .11 & .16 & .08 & .12 & .10 & .03 & .19 \\ \hline\hline \multicolumn{11}{|c|}{\it National Accounts-Survey Means Differential on QOL Measure: Country Fixed Effects} \\ [.04in] \hline\hline & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] Log QOL Measure & { .141**} & { .942**} & { .262**} & { .252***} & { -.007} & { .346**} & { .137} & { .225} & { .068} & { .482**} \\ & (.057) & (.375) & (.107) & (.085) & (.031) & (.172) & (.084) & (.162) & (.134) & (.225) \\ & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] R2 & .03 & .02 & .02 & .05 & .00 & .02 & .00 & .00 & .00 & .03 \\ \hline Number of Obs. & 701 & 700 & 701 & 701 & 666 & 701 & 688 & 682 & 621 & 120 \\ & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] & & & & & & & & & & \\ [-.15in] Number of Clusters & 123 & 123 & 123 & 123 & 119 & 123 & 123 & 122 & 114 & 63 \\ \hline \hline \end{tabular} \end{center} \end{document}
Donc, cela fonctionne à peu près, mais prête attention à mes commentaires des lignes 15 et 17 du code, il y a sans doute encore quelques points à améliorer. Peut-être pourrais-tu préciser ce que tu veux traiter avec ces lignes.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager