Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

CSV Datei per Batch auslesen

Frage Entwicklung Batch & Shell

Mitglied: aiwa002

aiwa002 (Level 1) - Jetzt verbinden

28.09.2011, aktualisiert 29.09.2011, 5423 Aufrufe, 12 Kommentare, 1 Danke

Ich hab sowas bisher mit der Batchprogrammierung noch nicht umgesetzt,
und leider auch keine passende Anleitung gefunden.

Ich muss eine CSV Datei, welche aus 5 Spalten und 24 Zeilen besteht, auslesen.
Generell sind diese Zellen mit Nullwerten befüllt oder sind leer.
Ist das der Fall, dann ist nichts zu unternehmen.

Sollte jedoch ein Wert ungleich 0 sein, dann muss eine Textdatei (error.txt)
erzeugt werden, in der nur ein fester Wert z.B. "Werte gefunden" steht.

Ich hoffe das geht so umzusetzen!

Danke...
Gruß Steffen
Mitglied: bastla
28.09.2011 um 18:26 Uhr
Hallo aiwa002!

Ein wenig wenig konkret ...

Soll im Fall des Falles nur eine einzige Datei mit nur einem einzigen Eintrag erstellt werden?

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
28.09.2011 um 18:29 Uhr
Hallo aiwa002.

Grundsätzlich ist es also egal, dass es sich um eine CSV Datei handelt. Solange im Dateiinhalt keine Nummern zwischen 1 und 9 auftauchen, ist die Welt in Ordnung
ungetestet:
01.
findstr "[1-9]" "test.csv" >nul && >"error.txt" echo Werte gefunden
Grüße
rubberman
Bitte warten ..
Mitglied: Friemler
28.09.2011 um 19:09 Uhr
Hallo aiwa002,

ich würde zu
findstr "[^0;]" "test.csv" > NUL && >"error.txt" echo Werte gefunden
raten, falls als Trennzeichen in der CSV das Semikolon benutzt wird.

Gruß
Friemler
Bitte warten ..
Mitglied: rubberman
28.09.2011 um 19:26 Uhr
Hallo Friemler,

what about
...;132.0;...

und was ist mit
... oder sind leer.


Grüße
rubberman
Bitte warten ..
Mitglied: Friemler
28.09.2011 um 19:33 Uhr
Hallo rubberman,

..;132.0;... wird wegen der enthaltenen, von 0 verschiedenen Ziffern gefunden. Der Dezimalpunkt alleine würde aber auch schon ausreichen, ist ja schließlich keine 0 und auch kein Semikolon .

Leere Zellen würden in der CSV als zwei aufeinander folgende ; auftauchen. Das würde also nicht als Fund gelten.

Gruß
Friemler
Bitte warten ..
Mitglied: aiwa002
28.09.2011 um 22:37 Uhr
Danke für die schnellen Antworten...

Das Ganze funktioniert soweit super, genau so brauch ich das Ganze.

Hat man hier eigentlich noch eine Möglichkeit um die Zeilen und Spalten
bei der Abfrage der CSV einzuschränken?
z.B. soll nur in den Spalten 2-4 und in den Zeilen 5-10 nach Werten
gesucht werden.

Gruß
aiwa002
Bitte warten ..
Mitglied: Friemler
28.09.2011 um 23:02 Uhr
Hallo aiwa002,

teste mal folgendes:
01.
@echo off & setlocal 
02.
 
03.
 
04.
set "InFile=Test.csv" 
05.
set "Delim=;" 
06.
 
07.
set "Protocol=error.txt" 
08.
 
09.
set "BegLine=5" 
10.
set "EndLine=10" 
11.
 
12.
set /a "BegCol=2+1" 
13.
set /a "EndCol=4+1" 
14.
 
15.
 
16.
del "%Protocol%" 2>NUL 
17.
 
18.
for /f "tokens=1,%BegCol%-%EndCol% delims=:%Delim%" %%a in ('findstr /n "^" "%InFile%"') do ( 
19.
  if %%a geq %BegLine% if %%a leq %EndLine% ( 
20.
    <NUL set /p "=%%b%Delim%%%c%Delim%%%d" | findstr "[^0%Delim%]" > NUL && >>"%Protocol%" echo Werte gefunden in Zeile %%a 
21.
22.
)
Damit wird pro Zeile der CSV, die deinen Vorgaben nicht entspricht, eine Zeile in die Protokolldatei geschrieben, in der auch die Zeilennummer der betreffenden Zeile aus der CSV zu finden ist (das muss man evtl. zweimal lesen ). Wenn nur Zeilen, deren Zellen Nullen oder nichts enthalten, in der Eingabedatei vorhanden sind, existiert nach dem Scriptlauf keine Protokolldatei.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
28.09.2011 um 23:10 Uhr
@Friemler
Die Variablen %BegCol% und %EndCol% sind aber eher Kosmetik, wenn Du danach mit %%b bis %%d genau 3 Spalten vorgibst ...

Außerdem: Unmittelbar aufeinander folgende CSV-Delimiter (also etwa ";;;;4") müsstest Du auch noch berücksichtigen ...

Grüße
bastla
Bitte warten ..
Mitglied: Friemler
28.09.2011 um 23:17 Uhr
Hallo bastla,

das fiel mir auch gerade auf. Ich wollte noch schnell ein entsprechendes EDIT schreiben und verkünden, dass ich mich darum heute nicht mehr kümmern kann, muss jetzt ins Bett. Evtl. kannst Du ja "übernehmen" .

N8
Friemler
Bitte warten ..
Mitglied: rubberman
28.09.2011 um 23:27 Uhr
Hallo Zusammen,

etwas anderer Ansatz:
01.
@echo off &setlocal enabledelayedexpansion 
02.
03.
  for /l %%i in (1,1,4) do set /p "=" 
04.
  for /l %%i in (1,1,6) do ( 
05.
    set "line=" 
06.
    set /p "line=" 
07.
    set "line= !line:;= ; !" 
08.
    for /f "tokens=2-4 delims=;" %%A in ("!line!") do ( 
09.
      echo(%%A%%B%%C|findstr "[1-9]" >nul && >error.txt echo Werte gefunden 
10.
11.
12.
)<"test.csv"
Sieht zugegeben etwas komisch aus, aber SET /P in einem solchen Block liest tatsächlich Zeile für Zeile. Die erste FOR /L Schleife sorgt dafür, dass die ersten 4 Zeilen nicht berücksichtigt werden.

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
28.09.2011 um 23:42 Uhr
@Friemler
[Edit] Analog zu rubbermans Behandlung dieser Thematik sollte das so gehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set "InFile=Test.csv" 
04.
set "Delim=;" 
05.
 
06.
set "Protocol=error.txt" 
07.
 
08.
set "BegLine=5" 
09.
set "EndLine=10" 
10.
 
11.
set "BegCol=2" 
12.
set "EndCol=4" 
13.
 
14.
del "%Protocol%" 2>NUL 
15.
 
16.
for /f "tokens=1,* delims=:" %%i in ('findstr /n "^" "%InFile%"') do ( 
17.
  if %%i geq %BegLine% if %%i leq %EndLine% ( 
18.
    set "Line=%%j" 
19.
    for /f "tokens=%BegCol%-%EndCol% delims=%Delim%" %%b in ("!Line:%Delim%= %Delim% !") do ( 
20.
      <NUL set /p "=%%b%Delim%%%c%Delim%%%d"|findstr /r /c:"[^0%Delim% ]" > NUL && >>"%Protocol%" echo Werte gefunden in Zeile %%i 
21.
22.
23.
)
[/Edit]

[Edit2] Meinen eigenen Ansatz hatte ich zwar schon auf Eis gelegt, aber da bisher die Spalten noch nicht variabel festgelegt wurden:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Datei=test.csv" 
03.
set "Delim=;" 
04.
 
05.
set "Error=error.txt" 
06.
 
07.
set "VonZeile=5" 
08.
set "BisZeile=10" 
09.
set "VonSpalte=2" 
10.
set "BisSpalte=4" 
11.
 
12.
del "%Error%" 2>nul 
13.
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%Datei%"') do if %%a geq %VonZeile% if %%a leq %BisZeile% echo %%b|findstr "[^0%Delim%]"> NUL && (set "Zeile=%%b" & call :ProcessLine %%a) 
14.
goto :eof 
15.
 
16.
:ProcessLine 
17.
set "Zeile=%Zeile: =%" 
18.
set "Zeile=!Zeile:%Delim%=0 !" 
19.
set /a SpNr=1 
20.
for %%i in (%Zeile%) do ( 
21.
    if !SpNr! geq %VonSpalte% if !SpNr! leq %BisSpalte% if %%i gtr 0 echo Wert gefunden: Zeile %1 Spalte !SpNr! 
22.
    set /a SpNr+=1 
23.
)>>"%Error%"  
24.
goto :eof
[/Edit2]

Grüße
bastla
Bitte warten ..
Mitglied: aiwa002
30.09.2011 um 06:50 Uhr
Hat super geklappt!

Danke...
Bitte warten ..
Ähnliche Inhalte
VB for Applications
CSV Datei mit VBS auslesen
Frage von scorpionesc83VB for Applications4 Kommentare

Hallo zusammen, ich bin in Sachen VBS ein totaler Anfänger und hoffe, dass ihr mir bei einem Problem helfen ...

Batch & Shell
Dateien aus CSV mit Batch suchen
gelöst Frage von joes1609Batch & Shell5 Kommentare

Hallo zusammen, ich stehe gerade auf dem Schlauch. Ich habe eine CSV-Datei, in der stehen zusammengesetzt, jeweils ein kompletter ...

Batch & Shell
BATCH ini Datei Datei auslesen
gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Batch & Shell
Batch File zum Auslesen einer Datei
gelöst Frage von Marcel1989Batch & Shell9 Kommentare

Hallo, Ich scheibe momentan ein Anmeldescript als batch mit dem Aufruf von VBS dateien. Hierfür haben wir bereits gruppen ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 5 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 6 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 8 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 13 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...