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

Mitglied: aiwa002

aiwa002 (Level 1) - Jetzt verbinden

28.09.2011, aktualisiert 29.09.2011, 5721 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
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 ...

Batch & Shell

Netshare Batch aus CMD auslesen und in CSV erstellen

gelöst Frage von nowyouseeme93Batch & Shell13 Kommentare

Das bekomme ich aus cmd Befehl: Share name Resource Remark ADMIN$ C:\Windows Remote Admin IPC$ Remote IPC I$ I:\ ...

Neue Wissensbeiträge
Windows Server
Erneutes Release von WS2019 und Win10 v1809
Tipp von IT-Pro vor 18 StundenWindows Server3 Kommentare

Hi, nachdem der Windows Server 2019 und Windows 10 in der Version 1809 aufgrund von verschwinden von Dateien nach ...

CPU, RAM, Mainboards
Spectre Update Tool für ältere PCs
Information von sabines vor 20 StundenCPU, RAM, Mainboards6 Kommentare

Mit Hilfe eines Tools wird der betreffende PC permanent von einem USB Stick gestartet, der ein passendes Microcode Update ...

Windows 10
Windows 10 Oktober 2018 Update: Es ist wieder da
Tipp von Bowsette vor 1 TagWindows 101 Kommentar

Ein neuer Versuch von Microsoft das Windows 10 Oktober 2018 Update, auch bekannt als 1809, an den Mann zu ...

Windows Server

Windows Server 2016: Achtung - ab heute gibt es wieder Express Updates

Information von kgborn vor 1 TagWindows Server1 Kommentar

Kurze Info für Administratoren, die Windows Server 2016 per WSUS/SCCM mit Updates betanken. Ab heute gibt es für Windows ...

Heiß diskutierte Inhalte
Windows Server
Windows Server 2016 Lizenzierung - 7 Hyper V VMs
Frage von staybbWindows Server18 Kommentare

Hallo zusammen, wir haben zwei HP Server gekauft mit jeweils pro Server 2 CPUs à 10 Cores. Also insgesamt ...

Batch & Shell
Ordnernamen mit String aus Ziffern-Zahlenkombination erstellen
Frage von MmarKussBatch & Shell16 Kommentare

Hallo zusammen, ich habe ein etwas komplexeres Problem, welches ich selbst mittels einer Batch-Datei lösen will / muss, da ...

Windows Server
Lohnt sich eine Domäne für uns?
Frage von BowsetteWindows Server12 Kommentare

Hallo, ich arbeite in einem kleinen Unternehmen mit mehr als 5 und weniger als 10 Mitarbeitern, also Small Business ...

Windows Server
AD Password Reminder Mail
Frage von TeutoneWindows Server10 Kommentare

Hallo liebe Leute, ich habe vor langer Zeit einmal ein Password Reminder Mail Script erstellt, welches nun nicht mehr ...