1
2

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
11●1●3
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 28 Apr, 13:16

Hirshy's gravatar image

Hirshy
741●11●38●46
Akzeptiert-Rate: 0%

Vielen Dank, aber das hatte ich schon probiert, es erscheint kein Ergebnis an der Stelle.

(05 Mai, 20:44) migo2000

@migo2000: Wenn man bei der Eingabe der daten.csv keinen Fehler gemacht hat und diese wirklich exakt den Inhalt hat, den du für Daten.csv angegeben hast, dann bekommt man mit aktuellem datatool als Ergebnis: https://imgur.com/JxJvFgD, also u. a. "Von A nach C sind es: 267,3 km" und damit wohl genau das, was du willst. Wenn du etwas anderes hast, dann kontrolliere bitte, die Korrektheit der datan.csv und ob aktuelle Versionen der Pakete verwendet werden.

(12 Stunden her) cabohah

Ich erhielt den Fehler "column km does not exist in daten.csv". Daraufhin habe ich das Datenfile auf eine Spalte "km" reduziert. Jetzt funktioniert die Addition korrekt, Ergebnis und Dezimalkomma. Kann es am "Design" der .csv-Datei liegen, dass die gewünschten Ergebnisse nicht erscheinen?

Permanenter link

beantwortet vor 2 Tagen

schlusnath's gravatar image

schlusnath
41●1●3
Akzeptiert-Rate: 0%

Auch das ist keine Antwort auf die Frage. Bitte so etwas als Kommentar zur entsprechenden Frage oder Antwort posten.

(12 Stunden her) cabohah

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
11●1●3
Akzeptiert-Rate: 0%

Das ist wohl das angefragte MWE und gehört damit ebenfalls in die Frage und nicht in eine Antwort, da es die Frage nicht beantwortet sondern das Problem verdeutlicht.

(12 Stunden her) cabohah

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
11●1●3
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 ♦♦

@stefan, @migo2000 Das ist offensichtlich eine Ergänzung zur Frage. Kann man das bitte in die Frage verschieben und hier löschen? (Auf TeX.SX wird kann man solche Nicht-Antworten direkt melden, hier geht das offenbar nicht.)

(12 Stunden her) cabohah
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
×32
×18
×14

gestellte Frage: 22 Apr, 21:56

Frage wurde gesehen: 2,690 Mal

zuletzt geändert: 12 Stunden her