IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Comment créer et ouvrir un fichier Latex avec Perl Script?


Sujet :

Langage Perl

  1. #1
    Membre régulier Avatar de Clairant
    Homme Profil pro
    Doctorant en économie (UdeM), Ingénieur Statisticien Economiste
    Inscrit en
    Mars 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant en économie (UdeM), Ingénieur Statisticien Economiste

    Informations forums :
    Inscription : Mars 2015
    Messages : 79
    Points : 71
    Points
    71
    Par défaut Comment créer et ouvrir un fichier Latex avec Perl Script?
    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.

    **********************************************************

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    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.

  3. #3
    Membre régulier Avatar de Clairant
    Homme Profil pro
    Doctorant en économie (UdeM), Ingénieur Statisticien Economiste
    Inscrit en
    Mars 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant en économie (UdeM), Ingénieur Statisticien Economiste

    Informations forums :
    Inscription : Mars 2015
    Messages : 79
    Points : 71
    Points
    71
    Par défaut
    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.

    **********************************************************

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    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:

    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;
    Et pour ouvrir un fichier en mode écriture:

    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;

  5. #5
    Membre régulier Avatar de Clairant
    Homme Profil pro
    Doctorant en économie (UdeM), Ingénieur Statisticien Economiste
    Inscrit en
    Mars 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant en économie (UdeM), Ingénieur Statisticien Economiste

    Informations forums :
    Inscription : Mars 2015
    Messages : 79
    Points : 71
    Points
    71
    Par défaut
    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.

    **********************************************************

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    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:

    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";
        }
    }
    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.

  7. #7
    Membre régulier Avatar de Clairant
    Homme Profil pro
    Doctorant en économie (UdeM), Ingénieur Statisticien Economiste
    Inscrit en
    Mars 2015
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant en économie (UdeM), Ingénieur Statisticien Economiste

    Informations forums :
    Inscription : Mars 2015
    Messages : 79
    Points : 71
    Points
    71
    Par défaut
    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.

    **********************************************************

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    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:

    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";
        }
    }
    A l'exécution, cela crée un fichier nommé $tablenew.tex ayant le contenu suivant:

    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.

Discussions similaires

  1. Ouvrir un fichier Html avec Perl
    Par ash_rmy dans le forum Langage
    Réponses: 6
    Dernier message: 09/11/2009, 11h44
  2. Comment créer un raccourci de fichier avec VB6
    Par Najdar dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 20/11/2007, 19h27
  3. Comment ouvrir un fichier .xla avec excel ?
    Par Australia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/11/2006, 18h08
  4. comment ouvrir un fichier XML avec excel
    Par ALCINA dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 24/03/2006, 14h42
  5. Réponses: 5
    Dernier message: 01/03/2006, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo