sverweis umsetzen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: sverweis umsetzen

von Besserwisser » So 3. Feb 2013, 14:45

Besserwisser hat geschrieben:The datatool package can be used to:
  • Create or load databases.
  • Sort rows of database …
  • Perform repetitive operations on each row of a database
:oops: vertippt:
The datatool package can be used to:
  • Create or load databases.
  • Sort rows of database …
  • Perform repetitive operations on each row of a database
[/list]

von Besserwisser » So 3. Feb 2013, 14:43

Was hast Du denn über datatool gelesen? Bereits in Kapitel 1 der datatool-Anwenderanleitung heißt es:
[quote]The datatool package can be used to:
  • Create or load databases.
  • Sort rows of database …
  • Perform repetitive operations on each row of a database[/liat]{quote] Das erste und letzte ist das, was Du möchtest, zum einen eine Datenbank laden, zum anderen Operationen auf den Zeilen der Datenbank ausführen. So könnte man beispielsweise für jede Zeile eine Makro (=Textmarke) definieren, dessen Name aus der ersten Spalte und dessen Wert aus der zweiten generiert wird (hier wäre eine der foreach-Anweisungen von datatool nützlich). Oder man sucht gezielt nach einem Wert und verwendet dasselbe Makro immer wieder:
    % In diesem Beispiel wird zunächst eine csv-Datei erzeugt.
    % Das funktioniert so nur, wenn diese Datei noch nicht existiert!!!
    \begin{filecontents*}{\jobname.csv}
    id,artnum
    70.61.8.400.000,47110000
    70.61.8.400.001,08150000
    \end{filecontents*}
    
    \documentclass{article}
    \usepackage[utf8]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage[T1]{fontenc}
    \usepackage{lmodern}
    
    \usepackage{datatool}
    \DTLloaddb{artnums}{\jobname.csv}% Datenbank einlesen.
    
    \begin{document}
    
    \DTLgetvalueforkey{\kdartnum}{artnum}{artnums}{id}{70.61.8.400.001}% Wert suchen!
    Die Artikelnummer für id=70.61.8.400.001 lauter \kdartnum.
    
    \DTLgetvalueforkey{\kdartnum}{artnum}{artnums}{id}{70.61.8.400.000}% Wert suchen!
    Die Artikelnummer für id=70.61.8.400.000 lautet \kdartnum.
    
    \end{document}

von sr » So 3. Feb 2013, 12:59

Dies möchte ich machen und zwar möglichst ohne externes Script. Nur das die Ergebnisse natürlich nicht in einer Exceltabellesondern im LaTEX-Dokument ersetzt/angezeigt werden sollen.

http://excelwelt.de/excelallg/sverw.html

Eine Textmarke hinter einem gekennzeichneten Begriff soll mit der Information aus der 2. Spalte einer csv-Datei ersetzt werden.

bzgl. "datatool": was ich bisher gelesen habe, wir datatool zur manipulation von einer, wie auch immer gearteten, Datenbank benutzt. Ich will nicht manipulieren, sondern Daten auslesen und in ein LaTEX-Dokument einsetzen, anhand eines im Text vorhandenen Schlüssels.

von dknof » So 3. Feb 2013, 10:50

Hallo Sven,

am Besten beschreibst Du Dein Beispiel einmal so, dass Du einmal die vollständige Eingabe und einmal die vollständig gewünschte Ausgabe zeigst. Dabei solltest Du die für das Problem unwichtigen Dinge weglassen (von Deinem Beispiel ist nur eine Zeile wichtig, dafür kann man Dein Dokument nicht kompilieren).
Und hast Du schon meinen Vorschlag ausprobiert? Wenn ja, was fehlt Dir daran oder was hast Du daran nicht verstanden?

Als Ergänzung: Mit
\documentclass{scrartcl}

\newcommand{\Artikel}[2]{%
% #1 Artikelnummer
% #2 Kundennummer
\section{Artikel #2}
\begingroup
\newcommand{\Artikelnummer}{#1}
\newcommand{\Kundenartikelnummer}{#2}
\input{Produktbeschreibungen/#1.tex}
\endgroup
}

\begin{document}
\Artikel{1}{A}
\Artikel{2}{B}
\Artikel{4}{D}
\end{document}
hast Du in den Dateien Zugriff auf die eigene Artikelnummer und die Artikelnummer des Kundens.
Erstelle noch die Dateien Produktbeschreibungen/1.tex, Produktbeschreibungen/2.tex und Produktbeschreibungen/4.tex jeweils mit dem Inhalt
Artikelnummer: \Artikelnummer\\
Kundenartikelnummer: \Kundenartikelnummer
In Deinem Beispiel wäre dies die Datei Produktbeschreibungen/70.61.8.400.000.tex

Gruß
Diether

von u_fischer » Sa 2. Feb 2013, 18:22

Wenn's so nicht verständlich ist, bin ich mit meinem Erklärungslatein am Ende.
Also ich finde es unverständlich. Dein Code enthält lauter Dinge (\large, \color, \includegraphics, \raisebox, "z.B für Pumpen oder Lüfter 400V AC 50/60 Hz", deren einzige Funktion zu scheint, deinen Code unübersichtlich zu gestalten.


Abgesehen davon, ist es trivial eine Nummer durch die andere zu ersetzen. Und mit datatool kann man auch sicherlich die Liste der \@namedef-Definitionen automatisch erzeugen:
\documentclass{article}
\makeatletter
\@namedef{70.61.8.400.000}{47110000}
\makeatother
\begin{document}

\csname70.61.8.400.000\endcsname
\end{document}

von sr » Sa 2. Feb 2013, 17:35

O.K. ich beschreibe das Problem anders.

Beispiel:

1. .tex-Datei
....
\begin{tabular}{l l  r}
{\LARGE \bf Netzüberwachung} & & 3-Phasen {\color{red}ohne} Hilfsspannung\\[3ex]
z.B für Pumpen oder Lüfter 400V AC 50/60 Hz & &\\[5ex]
\hline \\
& Type Finder & Artikelnummer\\[3ex]
1W / 6A & & \\[1ex]
\raisebox{-1\height}{\includegraphics[height=100px]{produktbilder/7061} \includegraphics[height=100px]{produktzeichnungen/7231-wiring}} & %70.61.8.400.000% & %kdartnum% \\[1ex]
\end{tabular}
...
2. .csv-Datei
....
70.61.8.400.000;47110000
....
Jetzt soll also %kdartnum% gegen 4711000 getauscht werden, wenn 70.61.8.400.000 in der irgendwo (in der .tex-Datei ?) angegebene cvs-Datei gefunden wird und die 2 Spalte nicht leer ist.

Wenn ich den Dateinamen der csv-Datei dann im tex-code ändere, wird z.B. ein PDF-Dokument mit den Artikelnummern eines anderen Kunden erzeugt.

Wenn's so nicht verständlich ist, bin ich mit meinem Erklärungslatein am Ende.

Danke schonmal
Sven

von Besserwisser » Sa 2. Feb 2013, 16:26

sr hat geschrieben:O.K. scheinbar geht das nur in Zusammenarbeit mit einer Scriptsprache.
Also willst Du etwas anderes als der anonyme Gast vermutet hat, denn diverse der von ihm aufgeführten Pakete (darunter übrigens auch das von dknof noch einmal erwähnte datatool) brauchen keine zusätzliche Scriptsprache zur Verarbeitung von CSV-Dateien. Daher wäre es eigentlich allerhöchste Zeit, dass Du mal richtig erklärst und am besten auch mit Beispielen illustrierst, was denn nun tatsächlich das Problem ist. Anderenfalls frustrierst Du nicht nur Dich, sondern auch die Helfer. Probleme ordentlich zu formulieren, so dass sie auch jemand verstehen kann, der nicht seit drei Tagen beobachtet, was Du machst, sollte eigentlich selbstverständlich sein.

von dknof » Fr 1. Feb 2013, 22:01

Hallo Sven,

als erstes beschreibe ich Dein Problem so, wie ich es verstanden habe.
Ihr habt eine Liste von Produkten, die Ihr mit Euren Artikelnummern verseht, also beispielsweise 1,2,3,4. Dann habt Ihr die Kundenartikelnummern, die Euren Artikelnummern zugeordnet sind, also A,B,D wird entsprechend A-1, B-2, D-4 zugeordnet, 3 ist dabei nicht für den Kunden vorgesehen. Nun willst Du einen Katalog für diesen Kunden erstellen, in dem die hinter 1,2,4 hinterlegten Daten unter A,B,D dargestellt werden.

Das LaTeX-Dokument hat dann die Struktur
\documentclass{scrartcl}

\newcommand{\Artikel}[2]{%
% #1 Artikelnummer
% #2 Kundennummer
\section{Artikel #2}
\input{Produktbeschreibungen/#1.tex}
}

\begin{document}
\Artikel{1}{A}
\Artikel{2}{B}
\Artikel{4}{D}
\end{document}
Die automatische Generierung aus einer csv-Datei kannst Du mit datatool (Dokumentation: texdoc datatool) direkt in LaTeX hinbekommen.
Ich würde allerdings einfach ein Shell-Skript schreiben. Ist Kunde.csv die Datei mit Kundenartikelnummer in der ersten Spalte und Artikelnummer in der zweiten Spalte, dann schreibt unter Unix/Linux/MinGW
(read; sed 's/^\(.\+\);\(.\+\)$/\\Artikel{\2}{\1}/') <Kunde.csv >Kunde.tex
die gewünschten Befehle in die Datei Kunde.tex, wobei die erste Zeile ignoriert wird. Diese musst Du dann nur noch mit \input in Dein tex-Dokument einlesen.

Gruß
Diether

von sr » Fr 1. Feb 2013, 18:56

O.K. scheinbar geht das nur in Zusammenarbeit mit einer Scriptsprache.
Trotzdem danke für den Versuch.

von Gast » Fr 1. Feb 2013, 18:31

Mir ist noch immer nicht klar, was Du eigentlich willst, aber eventuell suchst Du http://www.ctan.org/topic/data-import?

Wenn nicht: http://www.dets-home.de/it-writings/sma ... s-ger.html

PS: Und bitte den Status anpassen.

Nach oben