Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Problem mit FPeval und datatool

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.07.2009
    Beiträge
    67

    Problem mit FPeval und datatool

    Hallo,

    ich würde gerne das Ergebnis einer Rechnung mit FPeval in meinem Dokument habe.

    Verwende ich es folgendermaßen, dann funktioniert es einwandfrei:
    Code:
    \FPeval{\result}{round(1+1/2,2)
    Ich möchte aber nun Zahlen aus einer csv-Datei mit datatool einlesen.

    Diese sind folgendermaßen definiert:

    Code:
    \newcommand{\D}[2]{\FPadd{\erg}{1}{#2}\FPround{\erg}{\erg}{0} \DTLgetvalue{\A}{Komm}{\erg}{\dtlcolumnindex{Komm}{D#1}} \A}
    Leider bekomme ich, wenn ich mit einer solchen Zahl rechnen will, immer eine Fehlermeldung:

    Code:
    \FPeval{\result}{round(\D{xA}{43}/2,2)
    Fehlermeldung ist folgende:

    ! Argument of \next has an extra }.\par \FPdiv \result

    Ich kann die Zahlen aber mit folgendem Code problemlos einfügen:

    Code:
    $\frac{\D{xA}{43}}{2}$
    Hat jemand eine Idee?

    Danke!

  2. #2
    Registrierter Benutzer
    Registriert seit
    31.07.2009
    Beiträge
    67
    Hier noch ein vollständiger Code, es funktioniert alles, bis auf die letzten beiden Zeilen, da bräuchte ich bitte Hilfe:

    Code:
    \documentclass[12pt,a4paper]{article}
    \usepackage{amsfonts, amsmath, amssymb, latexsym, amscd}
    \usepackage[latin1]{inputenc}
    \usepackage[german]{babel}
    \usepackage{datatool}
    \usepackage{fp}
    
    \begin{document}
    \DTLsetseparator{;}
    \DTLloaddb{Komm}{Komm_2005R_2010-12_0_5.csv}
    \DTLsetseparator{,}
    \newcommand{\D}[2]{\FPadd{\erg}{1}{#2}\FPround{\erg}{\erg}{0} \DTLgetvalue{\A}{Komm}{\erg}{\dtlcolumnindex{Komm}{D#1}} \A}
    
    $\frac{1}{\D{xA}{43}}$
    
    \FPeval{\result}{round(1+1/2,2)}
    \result
    
    \FPeval{\resultt}{round(1/\D{xA}{43},2)}
    \resultt
    
    \end{document}
    Die csv-Datei habe ich hier als txt-Datei hochgeladen, vor dem Durchlaufen bitte wieder umbenennen:

    Komm_2005R_2010-12_0_5.txt

    Wenn es mit einem anderen Rechen-Package geht, wäre ich auch dafür offen. Wichtig wäre, dass ich mit den eingelesenen Zahlen rechnen kann.

    Danke!

  3. #3
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.841
    Evtl versucht \FPeval hier \DTLgetvalue auseinander zu nehmen...jedenfalls funktioniert es bei mir, wenn ich die Ausgabe (\A) aus der Definition von \D herausnehme und dann \FPeval mit \A speise:
    Code:
    \documentclass[12pt,a4paper]{article}
    \usepackage{amsfonts, amsmath, amssymb, latexsym, amscd}
    \usepackage[latin1]{inputenc}
    \usepackage[german]{babel}
    \usepackage{datatool}
    \usepackage{fp}
    
    \begin{document}
    \DTLsetseparator{;}
    \DTLloaddb{Komm}{Komm_2005R_2010-12_0_5.csv}
    \DTLsetseparator{,}
    \newcommand{\D}[2]{\FPadd{\erg}{1}{#2}\FPround{\erg}{\erg}{0} \DTLgetvalue{\A}{Komm}{\erg}{\dtlcolumnindex{Komm}{D#1}}}
    
    \makebox[0pt][l]{a}\D{xA}{43}a%<-- hier sollte sich nur ein `a' zeigen (tut es auch, wenn man das Leerzeichen vor \DTLgetvalue in der Definition von \D löscht)
    
    $\frac{1}{\A}$
    
    \FPeval{\result}{round(1+1/2,2)}
    \result
    
    \FPeval{\resultt}{round(1/\A,2)}
    \resultt
    
    \end{document}
    VG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  4. #4
    Registrierter Benutzer
    Registriert seit
    31.07.2009
    Beiträge
    67
    Hallo,

    danke, so funktioniert es mal mit einer Zahl.

    Was mache ich, wenn ich mehrere Zahlen addieren will, bspw. (mit meiner ursprünglichen Definition):

    Code:
    \D{xA}{43} + \D{xA}{44} + \D{xA}{45}
    Danke!

  5. #5
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.841
    mit der geänderten Variante wohl etwa so:
    Code:
    \D{xA}{43}%
    \FPadd{\result}{0}{\A}%
    \D{xA}{44}%
    \FPadd{\result}{\result}{\A}%
     \D{xA}{45}%
    \FPadd{\result}{\result}{\A}%
    \result
    Du kannst Dir alternativ auch \D so umdefinieren, daß Du per Parameter den zuzuweisenden Befehl angeben kannst (analog zu \FPadd) und dann halt nicht nur \A zuweisen lässt.

    VG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  6. #6
    Registrierter Benutzer
    Registriert seit
    31.07.2009
    Beiträge
    67
    Vielen Dank, so gehts gut!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •