PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit FPeval und datatool



Oelle74
01-09-2021, 20:38
Hallo,

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

Verwende ich es folgendermaßen, dann funktioniert es einwandfrei:


\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:



\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:



\FPeval{\result}{round(\D{xA}{43}/2,2)


Fehlermeldung ist folgende:



! Argument of \next has an extra }.<inserted text>\par \FPdiv \result



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



$\frac{\D{xA}{43}}{2}$


Hat jemand eine Idee?

Danke!

Oelle74
02-09-2021, 06:08
Hier noch ein vollständiger Code, es funktioniert alles, bis auf die letzten beiden Zeilen, da bräuchte ich bitte Hilfe:




\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:

6299

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!

rais
02-09-2021, 11:33
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:


\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

Oelle74
02-09-2021, 16:29
Hallo,

danke, so funktioniert es mal mit einer Zahl.

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



\D{xA}{43} + \D{xA}{44} + \D{xA}{45}


Danke!

rais
03-09-2021, 10:13
mit der geänderten Variante wohl etwa so:


\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

Oelle74
03-09-2021, 19:28
Vielen Dank, so gehts gut!