Generazione automatica report (pacchetto datatool) ed errore

  • Creatore
    Topic
  • #23630
    Up
    0
    Down
    ::


    Salve a tutti, è il mio primo post in questo magnifico forum. Ho scoperto LaTeX al momento di redigere la tesi di laurea e mi è piaciuto così tanto che ancora oggi lo utilizzo nello svolgimento della mia attività professionale, soprattutto nella redazione di relazioni tecniche e documenti corposi. Adesso vorrei utilizzare LaTeX per la creazione automatica di piccoli documenti quali ad esempio un resoconto dell’attività svolta con la relativa tariffa a vacazione ed eventualmente anche la fattura.
    Partirei da un file csv (200804.csv) che viene aggiornato all’inizio di ogni giornata lavorativa così combinato: `week,day,month,year,per,oggetto
    Mar,01,04,2008,M,”Attività svolta n.1″
    Mer,02,04,2008,P,”Attività svolta n.2″`
    Ho poi scritto un pò di codice LaTeX sfruttando il pacchetto datatool:
    `\documentclass[a4paper,11pt]{article}
    \usepackage[a4paper,top=15mm,left=15mm,right=15mm,bottom=15mm]{geometry}
    \usepackage[latin1]{inputenc}
    \usepackage[greek,italian]{babel}
    \usepackage{array}
    \usepackage{datatool}
    \usepackage{ifthen}
    \pagestyle{empty}
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \newcommand{\meses}[1]{%
    \ifthenelse{\equal{#1}{01}}{gennaio}{}%
    \ifthenelse{\equal{#1}{02}}{febbraio}{}%
    \ifthenelse{\equal{#1}{03}}{marzo}{}%
    \ifthenelse{\equal{#1}{04}}{aprile}{}%
    \ifthenelse{\equal{#1}{05}}{maggio}{}%
    \ifthenelse{\equal{#1}{06}}{giugno}{}%
    \ifthenelse{\equal{#1}{07}}{luglio}{}%
    \ifthenelse{\equal{#1}{08}}{agosto}{}%
    \ifthenelse{\equal{#1}{09}}{settembre}{}%
    \ifthenelse{\equal{#1}{10}}{ottobre}{}%
    \ifthenelse{\equal{#1}{11}}{novembre}{}%
    \ifthenelse{\equal{#1}{12}}{dicembre}{}%
    }%
    %%%%%%%%%%%%%%
    % DATI DA INSERIRE MANUALMENTE
    \newcommand{\anno}{2008}
    \newcommand{\mesen}{12}
    %\newcommand{\file}{\anno\mesen.csv}
    \newcommand{\file}{200804.csv}
    \newcommand{\mese}{\meses{\mesen}}
    \newcommand{\tariffa}{100,00}
    %%%%%%%%%%%%%%%%%
    \newcommand{\prezzo}[1]{%
    \ifthenelse{\equal{#1}{12}}{140,00}{}%
    \ifthenelse{\equal{#1}{01}}{140,00}{}%
    \ifthenelse{\equal{#1}{02}}{140,00}{}%
    \ifthenelse{\equal{#1}{03}}{140,00}{}%
    \ifthenelse{\equal{#1}{04}}{280,00}{}%
    \ifthenelse{\equal{#1}{05}}{280,00}{}%
    \ifthenelse{\equal{#1}{10}}{280,00}{}%
    \ifthenelse{\equal{#1}{11}}{280,00}{}%
    \ifthenelse{\equal{#1}{06}}{560,00}{}%
    \ifthenelse{\equal{#1}{07}}{560,00}{}%
    \ifthenelse{\equal{#1}{08}}{560,00}{}%
    \ifthenelse{\equal{#1}{09}}{560,00}{}%
    }%
    \newcommand{\price}{\prezzo{\mesen}}
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \begin{document}
    \renewcommand\arraystretch{0.9}
    \Large
    \centering
    Prospetto sinottico relativo al mese di \mese\hspace{1mm}\anno\\
    \normalsize
    \begin{table} [!h]
    \begin{tabular}{c|ccccc|l}
    \multicolumn{7}{c}{\textbf{}}
    %1 & 2 & 3 & 4 & 5 & 6 & 7
    \DTLloaddb{prospetto}{\file}
    \DTLforeach*{prospetto}{\1=week,\2=day,\3=month,\4=year,\5=per,\6=oggetto}{%
    \\
    \theDTLrowi & \1 & \2 & \3 & \4 & \5 & \6
    }
    \end{tabular}
    \end{table}
    %%%
    \DTLsetnumberchars{.}{,}
    \DTLsetdefaultcurrency{\textgreek{\euro} }
    \DTLsavelastrowcount{\n}%
    \DTLmul{\impon}{\tariffa}{\n}%
    \DTLgadd{\res}{\impon}{\price}% ERRORE
    %\DTLgadd{\res}{\impon}{200}% questo è OK
    \DTLconverttodecimal{\res}{\mynum}
    \DTLdecimaltocurrency{\mynum}{\mynum2}
    Totale: (\n\ x \tariffa) + \price \hspace{0.5mm}= \mynum2
    %%%
    \end{document} `
    che purtroopo mi restituisce questo errore:
    `(“C:\Programmi\MiKTeX 2.7\tex\latex\substr\substr.sty”)) (prospetto2.aux)
    (“C:\Programmi\MiKTeX 2.7\tex\generic\babel\lgrcmr.fd”) ( FP-EQ? ) ( FP-MUL )
    ( FP-EQ? ) ( FP-EQ? )
    ! Missing \endcsname inserted.

    \protect
    l.70 \DTLgadd{\res}{\impon}{\price}
    % ERRORE
    ?
    `
    Il problema è probabilmente dovuto al giro di variabili che utilizzo visto che sostituendo la variabile \price con il suo valore il tutto compila senza problemi. Credo che tutto questo giro sia necessario per mantenere semplice l’inserimento dei pochi dati e automatizzare il più possibile (prevenendo errori di calcolo). Sapete aiutarmi ?
    Ho cercato qualche modalità per automatizzare la creazione di semplici documenti, in particolare sarebbe utile poter utilizzare un file esterno come input (in modo simile a datatool) ma ho trovato un documento di E. Vavassori su R e LaTex… credo che la complessità è eccessiva e non è giustificata per quello che devo farci io.

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #23631
      Up
      0
      Down
      ::

      Salve a tutti, è il mio primo post in questo magnifico forum. Ho scoperto LaTeX al momento di redigere la tesi di laurea e mi è piaciuto così tanto che ancora oggi lo utilizzo nello svolgimento della mia attività professionale, soprattutto nella redazione di relazioni tecniche e documenti corposi. Adesso vorrei utilizzare LaTeX per la creazione automatica di piccoli documenti quali ad esempio un resoconto dell’attività svolta con la relativa tariffa a vacazione ed eventualmente anche la fattura.
      Partirei da un file csv (200804.csv) che viene aggiornato all’inizio di ogni giornata lavorativa così combinato: `week,day,month,year,per,oggetto
      Mar,01,04,2008,M,”Attività svolta n.1″
      Mer,02,04,2008,P,”Attività svolta n.2″`
      Ho poi scritto un pò di codice LaTeX sfruttando il pacchetto datatool:
      `\documentclass[a4paper,11pt]{article}
      …`
      che purtroopo mi restituisce questo errore:
      `(“C:\Programmi\MiKTeX 2.7\tex\latex\substr\substr.sty”)) (prospetto2.aux)
      (“C:\Programmi\MiKTeX 2.7\tex\generic\babel\lgrcmr.fd”) ( FP-EQ? ) ( FP-MUL )
      ( FP-EQ? ) ( FP-EQ? )
      ! Missing \endcsname inserted.

      \protect
      l.70 \DTLgadd{\res}{\impon}{\price}
      % ERRORE
      ?`
      Il problema è probabilmente dovuto al giro di variabili che utilizzo visto che sostituendo la variabile \price con il suo valore il tutto compila senza problemi. Credo che tutto questo giro sia necessario per mantenere semplice l’inserimento dei pochi dati e automatizzare il più possibile (prevenendo errori di calcolo). Sapete aiutarmi ?
      Ho cercato qualche modalità per automatizzare la creazione di semplici documenti, in particolare sarebbe utile poter utilizzare un file esterno come input (in modo simile a datatool) ma ho trovato un documento di E. Vavassori su R e LaTex… credo che la complessità è eccessiva e non è giustificata per quello che devo farci io.

      Tutto bene, a parte che non userei l’ambiente table che è del tutto inutile in questo contesto.

      Unico problema: \newcommand{\price}{\prezzo{\mesen}} non va bene, perché la macro del pacchetto datatool si aspetta proprio un numero e non macro da espandere. Scrivi, al posto di quella riga
      `\edef\price{\prezzo{\mesen}}`
      e dovresti essere a posto.

      Io metterei i dati variabili all’inizio del file:
      `\newcommand{\anno}{2008}
      \newcommand{\mesen}{04}
      \documentclass[a4paper,11pt]{article}
      …`
      in modo che sia ovvio dove andare a pescarli per modificarli.

      Ciao
      Enrico

    • #23632
      Up
      0
      Down
      ::


      Ciao Enrico e grazie per l’aiuto.

      Scrivi, al posto di quella riga
      `\edef\price{\prezzo{\mesen}}`
      e dovresti essere a posto.

      Purtroppo continua a non andare e non capisco il motivo:
      `! Undefined control sequence.
      \equal
      {\mesen }{12}
      l.47 \edef\price{\prezzo{\mesen}
      }
      ?`
      Usando invece “def” al posto di “edef” continua a dare lo stesso errore del mio primo post.

      Io metterei i dati variabili all’inizio del file:
      `\newcommand{\anno}{2008}
      \newcommand{\mesen}{04}
      \documentclass[a4paper,11pt]{article}
      `

      Hai perfettamete ragione, appena risolvo questo probloema principale faccio una revisione al codice.

    • #23633
      Up
      0
      Down
      ::

      Ciao Enrico e grazie per l’aiuto.

      Scrivi, al posto di quella riga
      `\edef\price{\prezzo{\mesen}}`
      e dovresti essere a posto.

      Purtroppo continua a non andare e non capisco il motivo:
      `! Undefined control sequence.
      \equal
      {\mesen }{12}
      l.47 \edef\price{\prezzo{\mesen}
      }
      ?`
      Usando invece “def” al posto di “edef” continua a dare lo stesso errore del mio primo post.

      Già. Devi modificare anche la definizione di \prezzo:
      `\newcommand{\prezzo}[1]{%
      \ifcase#1\space\or
      140,00\or 140,00\or 140,00\or 280,00\or 280,00\or 560,00\or
      560,00\or 560,00\or 560,00\or 280,00\or 280,00\or 140,00\fi}`
      Purtroppo i comandi del pacchetto ifthen non si combinano bene con le “definizioni espanse”.

      La sintassi di \ifcase è abbastanza semplice, dopo tutto: dopo \ifcase metti il numero che ti interessa (in questo caso è l’argomento); poi \space per “isolare” il numero; prima del primo \or metti ciò che deve uscire se il numero è 0 (niente, nel tuo caso) e poi ciò che deve uscire per ogni valore da 1 a 12, separati da \or. Un \fi alla fine e hai finito.

      Ciao
      Enrico

    • #23634
      Up
      0
      Down
      ::


      Grazie mille per l’aiuto. Funziona tutto alla perfezione.
      Vado a studiarmi meglio \ifcase.

Visualizzazione 3 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top