sep-karl
Goto Top

Bestimmte Teil einer CSV auslesen

Guten Morgen,

ich habe eine CSV-Datei - raumliste.csv

die Datei sieht folgendermaßen aus:

IP-Adresse;Raumname;
10.50.126.1;H26;
10.48.103.1;E103;
10.50.119.1;H19;
etc.

Ich habe ein Variable %raum% in der z.B. "50.126" oder "48.103" steht.

Jetzt soll mein Batchscsript anhand der Informationen (der beiden mittleren Zahlen der IP) den zugehörigen Raumnamen ausgeben.

Content-Key: 167502

Url: https://administrator.de/contentid/167502

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: Skyemugen
Skyemugen 06.06.2011 um 08:44:17 Uhr
Goto Top
Aloha,

na das lässt sich doch ganz simpel per Schleife und findstr realisieren: (siehe Beispiel)

@echo off & setlocal
set "datei=test.csv"  
set "raum=50.126"  
for /f "tokens=2 delims=;" %%s in ('findstr /c:".%raum%." "%datei%"') do echo %%s  
pause
goto :eof

greetz André

edit: Nachbesserung à la Friemlers Einwand face-wink
Mitglied: Friemler
Friemler 06.06.2011 um 09:09:12 Uhr
Goto Top
Hallo Skyemugen,

da würde ich aber lieber
for /f "tokens=2 delims=;" %%s in ('findstr /c:".%raum%." "%datei%"') do echo %%s
nehmen. Sonst findet er z.B. auch 150.126

Gruß
Friemler
Mitglied: Skyemugen
Skyemugen 06.06.2011 um 09:37:16 Uhr
Goto Top
Aloha Friemler,

jo, das Thema mit dem der findest sonst auch fiel mir im Nachhinein auch noch ein aber erstmal war Frühstückspause, das war wichtiger ^_^

greetz André
Mitglied: Sep-Karl
Sep-Karl 06.06.2011 um 09:42:23 Uhr
Goto Top
Hallo,

vielen Dank, das hat mir schon sehr geholfen, es funktioniert so.

Kann mir jetzt jemand vllt. noch erklären, was die einzelnen Befehle machen, damit ich euch das nächste mal nicht wieder wegen solcher Kleinigkeiten belästigen muss...

und warum muss das ganze in eine "FOR-Schleife" ?

ist das "goto :eof" nötig ?? und was bedeuted ":eof" müsste das nicht erst irgendwo definiert sein ??

vielen Dank
Mitglied: Skyemugen
Skyemugen 06.06.2011 um 09:57:54 Uhr
Goto Top
Aloha,

klar, es wirkt erst einmal seltsam eine Schleife für eine Einzelheit zu nutzen aber die for /f-Nutzung bringt eben das mit, was du forderst: Eine Zerlegung des Inhaltes mit abgegrenzter Ausgabe - dazu haben wir ein schönes Tutorial zur FOR-Schleife aber um dich nicht erst damit wegzuschicken, erkläre ich es dir:

Da die CSV glücklicherweise in Semikola unterteilt ist und du den Wert der zweiten Spalte haben willst, nutzt man ganz einfach das Trennzeichen ;, welches per delims= definiert wird und setzt dazu die Ausgabe des zweiten Bereiches auch Token genannt tokens=2 (und da hier nur ein token angegeben wird, wird auch die angegebene Variable %%s genutzt, bei tokens=1,2 z.B. wäre die gewünschte Variable dann %%t)

Das goto :eof führt zum Beenden eines Ablaufes, wenn es keinen übergeordnete Ablauf/Prozess gibt, beendet diese die ausgeführte Batchdatei. goto :eof (was nichts anderes als end of bedeutet) ist eine im cmd bereits integrierte Sprungmarke und muss daher nicht definiert sein.

Ich denke, den findstr-Befehl kannst du (zur Not mithilfe von findstr /?) selbst entziffern face-wink

greetz André
Mitglied: Sep-Karl
Sep-Karl 06.06.2011 um 10:14:10 Uhr
Goto Top
Hi André.

vielen Dank für die Erklärung, einzig, warum man die Variable %%s (bei nur einem token??) und %%t (bei mehreren tokens???) nutzt ist mir noch nicht ganz klar...

Der findstr-Befehl ist klar, Danke!!
Mitglied: Skyemugen
Skyemugen 06.06.2011 um 10:19:13 Uhr
Goto Top
Aloha,

man darf natürlich sinnvollerweise auch bei %%a anfangen und dann je nach Anzahl der Tokens weitere Variablen den Buchstaben des Alphabetes geben (in geordneter Reihen folge).

1. Token = genutzte Variable (z.B. %%a)
2. Token = im Alphabet folgender Buchstabe des Buchstaben, welcher in der Ursprungsvariable genutzt wurde (dann also %%b)
3. Token = im Alphabet folgender Buchstabe des Buchstaben, welcher in zweiten Variable genutzt wurde (in dem Fall dann %%c)

etc. etc. es geht also nach alphabetischer Reihenfolge und Anzahl der Tokens face-wink

In diesem Beispiel hier, wäre %%t eben der folgende Buchstabe auf %%s, wenn man tokens=1,2 also zwei Tokens verwenden würde und man nur den zweiten ausgegeben haben will (%%s wäre ja dann in dem Fall die IP)

greetz André
Mitglied: Sep-Karl
Sep-Karl 06.06.2011 um 10:36:49 Uhr
Goto Top
Aloha,

Super Erklärung - jetzt bin ich schlauer!!

vielen Dank!!