Problemi con test su campi letti da file (\if \ifthenelse \ifx …)

  • Creatore
    Topic
  • #122068
    Up
    0
    Down
    ::


    Ciao,

    sono Maurizio e non ho molta esperienza con Tex.
    Sto preparando un template in tex (compilo con pdfLatex) per poi utilizzarlo cambiando le info in input su un file di dati in formato chiave-valore.
    In pratica cambio i dati sul file di dati e poi compilo in maniera tale da cambiare alcune info sul PDF dinamicamente.

    Questo il file che sto utilizzando ora:
    VERO=1
    FALSO=0
    NOMINATIVO=Nome Cognome
    VISUALIZZA_BOX=1

    (dove VERO e FALSO) sono due prove.

    Nel codice creo un command che mi restituisce dinamicamente il valore della chiave corrispondente in questo modo:
    `\ifdefined\inputFileName
    % import data
    \DTLloaddb[noheader, keys={thekey,thevalue}]{mydata}{../\inputFileName}
    % \DTLloaddb[noheader, keys={thekey,thevalue}]{mydata}{../FileDatiRichiesta.txt}
    % Loads mydata.dat with column headers 'thekey' and 'thevalue'
    \newcommand{\var}[1]
    {
    \DTLfetch{mydata}{thekey}{#1}{thevalue}
    }
    \fi`
    Fin qui tutto ok. Se inserisco il seguente comando:
    \var{NOMINATIVO} mi viene restituito correttamente quanto presente nel file alla chiave corrispondente. Nell’esempio sopra: Nome Cognome.

    Il problema è con le if.
    Il campo sul file di dati VISUALIZZA_BOX ,mi serve per includere o escludere una sezione nel PDF.
    Qualsiasi istruzione uso: \if, \ifx, ifthenelse, \strcompare … mi viene restituito sempre false e non so cosa fare. Questo un esempio:
    `
    \newcommand\visualizza{\var{VISUALIZZA_BOX}}
    \newcommand\vero{\var{VERO}}
    \strcompare {\visualizza}{\vero} %oppure \if\visualizza\vero ….
    {% True case
    Vero
    }
    {% false case
    Falso
    }
    `
    Ovviamente:
    \newcommand\visualizza{\var{VISUALIZZA_BOX}} assegna correttamente a \visualizza il valore 1
    \newcommand\vero{\var{VERO}} assegna correttamente a \vero il valore 1

    Potete aiutarmi indicandomi il modo corretto per eseguire il test sul campo VISUALIZZA_BOX contenuto nel file di dati?

    Grazie,
    Maurizio.

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #122069
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Benvenuto nel forum
        Ti ho marcato i codici che hai inserito nel messaggio con gli appositi tag che dovresti usare tu stesso per rendere più chiaro il tuo messaggio.
        Ho scaricato i tuoi file che ahi allegato, dove ho capito poco o niente, forse perché oggi non sono in forma.
        Domani a mente fresca vedo di capire il tuo problema. l’unica cosa che ho notato a prima vista sono pacchetti e comandi che non ho mai incontrato in 40 anni di lavoro con LaTeX, quindi mi ci vorrà del tempo. Forse diversi giorni.
        Spero che anche altri utenti esperti più giovani e con la mente fresca non si limitino a leggere il tuo messaggio, ma si cimentino meglio di come ho fatto io.
        Ciao

      • #122070
        Up
        0
        Down
        ::


        Buongiorno e grazie per la risposta.

        La maggior parte dei pacchetti che trovi non sono utilizzati, sono frutto di varie prove e dovrò poi fare una pulizia.

        Quello che vorrei capire è come fare un test sul valore di un campo (coppia chiave valore) letto dal file di input.
        Ho provato in vari modi e con varie istruzioni ma nonostante il valore della chiave “VISUALIZZA_BOX” è 1 e viene correttamente visualizzato, le if (ifx, ifthenelse, strcompare) non funzionano.

        In pratica, nonostante i due command:

        `\newcommand\visualizza{\var{VISUALIZZA_BOX}}
        \newcommand\vero{\var{VERO}}`

        restituiscono entrambi il valore 1, qualsiasi istruzione if utilizzo per verificare se sono uguali mi restituisce sempre false.

        Spero di essere stato più chiaro.

        Grazie.
        Maurizio.

      • #122071
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Ne; promo file prova2.tex che hai mandato ls vsrisbile vsr non risulta mai definita. probabilmente sarebbe definita in uno dei pacchetti che ti sei scritti.

          Nel tuo ultimo messaggio scrivi che basta definire questi due comandi`\newcommand\visualizza{\var{VISUALIZZA_BOX}}
          \newcommand\vero{\var{VERO}}`Ma che anche con queste due definizioni ogni tipo di \if ti restituisce il valore flse, anche se i due oggetti da confrontare valgono entrembi 1.
          Vediamo i dettagli.

          Cos¡i come sono, senza disporre di una definizione di \vare, direi che è evidente che la macro \visualizza e la macro\vero non hanno lo stesso sviluppo (testo sostitutivo). qindi non sono equivalenti (nomi diversi ma lo stesso sviluppo}.

          Se usi \strcompare, di nuovo i due testi sostitutivi delle due macro sono formate due stringhe di caratteri diversi, quindi il risultato è false.

          Ecco, dunque che qualunque cosa fqcciqw ]a macro \var, il confronto potrebbe essere fatto con il comando \if puro e semplice perché questa macre confronta i risultati degli sviluppi
          delle macro \var{VISUALIZZA_BOX} e \var{VERO} sono entrambi uguali, per esempio, alla stringa PIPPO, allora \if esegue la parte true del suo sviluppo.
          Se vuoi usare \ifx o \strcompare devi arrangiarti con una sequenza di \expandafter ben congegnata per eseguire il confronto dei due argomenti dopo averli sviluppati.

          A seconda del significato di \var quello che ho scritto potrebbe avere un senso, oppure potrebbe essere una corbelleria.

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

      Go to top