Ergebnis 1 bis 8 von 8

Thema: Datatool -> Zellen auslesen und Variablen zuweisen

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.10.2010
    Beiträge
    11

    Lightbulb Datatool -> Zellen auslesen und Variablen zuweisen

    Hallo!

    Ich erstelle gerade eine Vorlage, mit der mehrere Nutzer arbeiten werden, die Latex nicht kennen / bedienen können.
    Als Datenübergabeschnittstelle habe ich mir eine CSV-Datei überlegt, in der sämtliche Definitionen getätigt werden, damit keiner im Code rumfuhrwerkt.
    Ich habe zwei Spalten und viele Zeilen. In der ersten Spalte steht die Bezeichnung und in der zweiten Spalte der Wert.

    Name Hans
    Wohnort Berlin

    etc.

    ich würde nun gerne folgendes tun:
    Eine Variable in Tex erzeugen aus der Bezeichnung und dem Namen der CSV-Datei: Also die Variablen heißen dann: csvnameName und csvnameWohnort.
    Die Variablen sollen nun mit dem Wert der Nachbarspalte befüllt werden. Also: csvnameName = Hans, csvnameWohnort = Berlin.
    Mit den Variablennamen möchte ich dann in Tex weitere Sachen anstellen. Ich würde auch ungerne Hart auf die Zellen verweisen (also Var1 = Spalte 2, Zelle 1),
    da in Zukunft vielleicht noch etwas eingefügt wird und ich so mit der von mir angestrebten Lösung flexibler bin.

    Ist das möglich und zielführend? Kennt ihr vielleicht bessere Möglichkeiten um Latex mit Daten zu versorgen?

    Vielen Dank!

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.10.2010
    Beiträge
    11
    Ich habe folgenden Code geschrieben:

    \documentclass{scrartcl}
    \usepackage[ngerman]{babel} %Bild statt Figure, Tabelle statt Table

    \usepackage{datatool} %Daten aus CSV lesen
    %\DTLnewdbonloadfalse
    \DTLsetseparator{,} %Trennzeichen zwischen Werten in den CSV Dateien

    \DTLloaddb{Test}{Unbenannt1.csv}
    \begin{document}

    \DTLforeach{Test}{\Bezeichnung=Bezeichnung,\Wert=W ert}
    {
    \newcommand{\Bezeichnung}{\Wert}
    }

    \end{document}


    Ich bekomme die Fehlermeldung, dass der \newcommand bereits existiert. Ich dachte, er geht jede Zeile durch und beschreibt die \Bezeichnung und den \Wert immer mit den Informationen aus der Zeile ...
    Das scheint aber nicht der Fall zu sein. :-(

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.011
    Ohne Datei zu kennen, kann man es nicht testen. Aber bist du dir sicher, dass du genug LaTeX kannst, um eine Vorlage für andere zu schreiben?

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.10.2010
    Beiträge
    11
    Hallo Ulrike,

    Es wird kein kompliziertes Dokument. Es soll jedoch von Personen, die noch nie Latex-Code gesehen haben mit einigen Textblöcken versehen werden.
    Das traue ich mir schon zu. ;-)
    Die csv-Datei ist ein Dummy. Z. B.

    Name1, Wert1
    Name2, Wert2
    Geändert von ionas (08-03-2017 um 13:13 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.011
    Nun, du solltest natürlich schon verstehen, warum
    Code:
    \newcommand\Name1{Wert1} \newcommand\Name2{Wert2}
    einen Fehler gibt.

  6. #6
    Registrierter Benutzer
    Registriert seit
    19.10.2010
    Beiträge
    11
    Hallo,

    in deiner Antwort, fehlen natürlich die ersten {}.
    Nun, dank Hilfe anderenorts funktioniert es nun. Falls es jemanden interessiert:
    \value wird bereits von Latex bei der Definition von Countern verwendet. Diese Variable sollte also nicht verwendet werden.
    Da das Paket Datatool auch Etools lädt kann man das ganze durch den Befehl \cslet einfach lösen.
    Folgender Code funktioniert:

    Code:
    \documentclass{scrartcl}
    
    \usepackage{filecontents}
    \begin{filecontents*}{Unnamed1.csv}
    name,value
    Voltage,14 V
    Current,1 A
    MoreText,something more is written here
    Date,2017/03/08
    \end{filecontents*}
    
    \usepackage[ngerman]{babel}
    \usepackage{datatool}
    \DTLsetseparator{,}
    \DTLloaddb{Test}{Unnamed1.csv}
    \begin{document}
    
    \DTLforeach{Test}{\Name=name,\Value=value}
    {%
     \cslet{\Name}{\Value}%
    }
    
    Voltage: \Voltage.
    
    Current: \Current.
    
    MoreText: \MoreText.
    
    Date: \Date.
    
    \end{document}

  7. #7
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.288
    Du definierst in einer Schleife denselben Befehl immer wieder neu. Die Fehlermeldung lautet dabei auch kaum, dass \newcommand bereits existiert. Schau noch einmal genauer hin.

    Edit: Ja, das neue Beispiel ist besser. Eine tabellarische Ausgabe kann man mit datatool aber auch machen, ohne dass man für jede Zeile explizit ein Makro definiert. Auch deine nicht tabellarische Ausgabe könnte man unmittelbar in die Schleife packen und so die zusätzlichen Makros einsparen.
    Geändert von klops (09-03-2017 um 06:39 Uhr)

  8. #8
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.011
    Zitat Zitat von ionas Beitrag anzeigen
    in deiner Antwort, fehlen natürlich die ersten {}.
    Nein. Die habe ich absichtlich weggelassen. Die sind nämlich erstens optional und zweitens bekommst du ohne die Klammern eine besseren (Fehler)-Rückmeldung. Du kannst ja mal überlegen, was hier wohl als Ausgabe rauskommt:

    Code:
    \documentclass{article}
    \begin{document}
    Definition: \newcommand{\Name1}{Wert1} \newcommand{\Name2}{Wert2}
    
    Testen: \Name1  \Name2
    \end{document}

Stichworte

Lesezeichen

Berechtigungen

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