Ich knacke seit ein paar Tagen an einem Problem und komme auch mit intensiver Suche nach Lösungen nicht weiter. Kurze Beschreibung meines Workflows:

  1. Eine Messdaten-Software wirft eine Excel-Datei aus, deren Daten ich mit dem Paket datatool nach Umwandlung in eine csv-Datei auszugsweise in ein Auswertungsprotokoll einlese. --> Das klappt gut
  2. Die eingelesenen Positionen werden als Befehl gespeichert, den ich an passender Stelle einfach aufrufe, klappt.
  3. Dezimalzahlen tragen ein Komma, das passt, weil ich in Deutsch schreibe.
  4. Mit einigen der Daten möchte ich weitere Berechnungen anstellen -- und da liegt der Hase im Pfeffer.

Es klingt so einfach, aber ich bekomme bei den Dezimalzahlen, die als Befehl gespeichert sind, mit keiner Methode Rechnungen durchgeführt. Ich arbeite in LuaLaTeX, und habe damit gestartet, aber erfolglos abgebrochen, viel Recherche, auch mit chatgpt-"Hilfe", nichts hat geklappt.

Bevor ich jetzt ein Beispiel einstelle, gibt es vielleicht jemanden, der sagt "Geht nicht, bearbeite die Excel-Datei vorher!" oder sagt "Kenne ich, das geht so:..."

gefragt 22 Apr, 21:56

migo2000's gravatar image

migo2000
111
Akzeptiert-Rate: 0%

Ich finde den Gedanken gut, die Excel-Datei zur Berechnung zu nutzen, und erst das gewünschte Ergebnis zu exportieren und in LaTeX zu importieren. LaTeX ist eher für Textgestaltung, auch wenn es mit Lua rechnen kann ist es eher selten so genutzt.

(22 Apr, 22:02) stefan ♦♦

Ich stimme dir vollkommen zu - wenn es nur einmalig und für mich wäre. Es handelt sich aber um viele derartige Auswertungsprotokolle (> 100), die auch von Menschen ohne LaTeX-Kenntnisse angefertigt werden sollen. Sie enthalten pgfplots-Diagramme, tikz- Grafiken und Tabellen. Alles wäre soweit fertig, wenn ich auf die Berechnung weiterer Werte aus den importierten csv-Dateien verzichten würde. Ich brauche die Werte aber. Nach so viel Vorarbeit scheitere ich an den letzten 0,5%.

(23 Apr, 07:18) migo2000

Das datatool-Paket bietet selber Rechenfunktionen an, hast Du das im Handbuch gesehen? Abschnitte 2.5 und 3.13, dann ggf. mit \DTLforeach usw. Ich habe das selbst nicht genutzt, aber es sieht sehr umfassend aus.

(23 Apr, 11:17) stefan ♦♦
(23 Apr, 11:18) stefan ♦♦

Danke!!! Ich schaue mir das gleich mal an

(23 Apr, 19:34) migo2000

Du kannst in den Einstellungen für das lokale Zahlenformat die Verwendung des Dezimalkommas bestimmen.

\documentclass{article}

\usepackage{datatool}


\begin{document}


% Semikolon als Spaltentrenner
\DTLsetseparator{;}

% Deutsches Zahlenformat:
% Punkt als Tausendertrennzeichen, Komma als Dezimalzeichen
\DTLsetnumberchars{.}{,}

% CSV-Datei einlesen
\DTLloadrawdb[keys={entfernung,km}]{daten}{daten.csv}

% Werte auslesen
\DTLassign{daten}{1}{\entfab=km}
\DTLassign{daten}{2}{\entfbc=km}
\DTLassign{daten}{3}{\entfcd=km}

\parindent=0pt

Dies ist die Entfernung zwischen Stadt A und Stadt B: \entfab\,km

Dies ist die Entfernung zwischen Stadt B und Stadt C: \entfbc\,km

Dies ist die Entfernung zwischen Stadt C und Stadt D: \entfcd\,km

Bis hierher funktioniert es.

\bigskip

Jetzt wird mit den eingelesenen Werten gerechnet:

\DTLadd{\entfac}{\entfab}{\entfbc}
\DTLround{\entfac}{\entfac}{1}

Von A nach C sind es: \entfac\,km

\end{document}
Permanenter link

beantwortet Gestern

Hirshy's gravatar image

Hirshy
731103846
Akzeptiert-Rate: 0%

Datenbank Daten.csv:

Entfernungen;km
Stadt A - Stadt B;35,8
Stadt B - Stadt C;231,5
Stadt C - Stadt D;98,8

Minimalbeispiel:

\documentclass{article}
\usepackage{datatool}
\DTLsetseparator{;} 
\DTLloadrawdb[keys={entfernung,km}]{daten}{daten.csv}
\DTLassign{daten}{1}{\entfab=km}    
\DTLassign{daten}{2}{\entfbc=km}    
\DTLassign{daten}{3}{\entfcd=km}
\parindent=0pt
\begin{document}
Dies ist die Entfernung zwischen Stadt A und Stadt B: \entfab\,km

Dies ist die Entfernung zwischen Stadt B und Stadt C: \entfbc\,km

Dies ist die Entfernung zwischen Stadt C und Stadt D: \entfcd\,km

Bis hierher funktioniert es.

Das Problem beginnt, wenn ich mit diesen hinterlegten Entfernungen rechnen möchte:

Zusammen sind es von Stadt A bis Stadt C \DTLadd{\entfac}{\entfab}{\entfbc}

Die Basisaddition mit Dezimalpunkt klappt:

\DTLadd{\entfac}{35.8}{231.5}
\DTLround{\entfac}{\entfac}{1}

Von A nach C sind es: \entfac\,km

\end{document}
Permanenter link

beantwortet 24 Apr, 21:34

migo2000's gravatar image

migo2000
111
Akzeptiert-Rate: 0%

Nach vielem, leider erfolglosem Probieren bleibt immer wieder der folgende Punkt übrig:

Mit datatool kann ich Zahlenwerte aus meinen csv-Dateien in LaTeX problemlos einlesen und verwenden. Die Befehle \DTLassignfirstmatch oder \DTLfetch klappen problemlos. Ich kann nur anschließend keine Rechnungen mit ihnen durchführen.

Beispiel: \dtladd{\foo}{2}{18} ergibt ganz brav 20. Das soll auch so sein.

Habe ich eine csv-Datei "Information.csv" mit

\DTLloadrawdb[keys={parameter,wert}]{info}{Information.csv} "info" genannt, und ihre zwei Spalten "parameter" und "wert" genannt

und entnehme weiterhin mit

\DTLfetch{info}{parameter}{Messwerta}{wert}

aus ihr den zum parameter "Messwerta" passenden Wert, so wird mir korrekt dieser Wert ausgeworfen, z.B. 0,44

Versuche ich aber zu diesem Wert etwas hinzu zu addieren mit

\dtladd{\foo}{2}{\DTLfetch{info}{parameter}{Messwerta}{wert}}

ergibt der Befehl \foo Fehlermeldungen und nicht den Wert 2,44

Mir ist klar, dass hinter einem TeX-Makro nur ein String steht und kein Zahlenwert, aber diese Konversion bekomme ich nicht hin.

Permanenter link

beantwortet 23 Apr, 22:15

migo2000's gravatar image

migo2000
111
Akzeptiert-Rate: 0%

bearbeitet 23 Apr, 22:23

Evtl. poste ein konkretes kleines Code-Beispiel, wo man das nachvollziehen und vllt. daran umsetzen kann. Deine Beschreibung verstehe ich, aber damit kann ich keinen Code erzeugen. Minimalbeispiel plus eine kleine CSV-Datei hier als Text eingefügt, dann kriegen wir das vllt. nachvollzogen und verbessert. Wie man Code einfügt und so, steht in den Hilfen zum Forum. (rechts oben, "über", "FAQ", Markdown-Hilfe) und am besten als Edit in die Frage. Du kannst sie jederzeit editieren. Weil Antworten sind hier technisch Antworten im Sinne von Lösungsvorschlägen. Vllt. kann ich dank Handbuch was lösen.

(24 Apr, 20:19) stefan ♦♦
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×80
×31
×18
×14

gestellte Frage: 22 Apr, 21:56

Frage wurde gesehen: 230 Mal

zuletzt geändert: Gestern