Archiv verlassen und diese Seite im Standarddesign anzeigen : 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:
\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!
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!
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
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!
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
Vielen Dank, so gehts gut!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.