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, 5829 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

Per Batch CSV Datei zeilenweise bereinigen

gelöst Frage von yakazaaBatch & Shell2 Kommentare

Hallo zusammen, ich muss eine CSV Datei in ein Programm importieren, die im Prinzip SO aussieht: Soweit so schlecht, ...

Windows XP

Zeilen einer zusammengeführten CSV Datei über Batch ändern

Frage von NelspruitWindows XP12 Kommentare

Hallo zusammen, ich habe über batch ca. 1000 CSV Datein (Messdaten) zusammengeführt. Das Ganze schaut nun in der neuen ...

Batch & Shell

Per Batch eine Spalte in eine CSV Datei einfügen

gelöst Frage von mayli01Batch & Shell13 Kommentare

Hallo Forum :) Folgende Ausgangssituation. Ich habe eine CSV Artikelliste mit insgesamt 9 Spalten, einer Kopfzeile und etwa 50 ...

Batch & Shell

CSV kleinerer Wert (Batch)

Frage von jochengBatch & Shell3 Kommentare

Ich habe eine CSV Datei mit folgendem Inhalt: 29664;24,95 29664;12,95 29645;9,95 29645;9,95 29655;12,95 29655;24,95 29664;24,95 29655,12,95 29655,24,95 29664;12,95 29664;24,95 ...

Neue Wissensbeiträge
Windows 10

Windows 10 V1809: Rollout ist gestartet - kommt per Windows Update

Information von kgborn vor 7 StundenWindows 10

Eine kurze Information für die Admins, die Windows 10 im Programm haben. Microsoft hat die letzte Baustelle (die Inkompatibilität ...

Sicherheit

Heise Beitrag Passwort-Sammlung mit 773 Millionen Online-Konten im Netz aufgetaucht

Information von Penny.Cilin vor 9 StundenSicherheit1 Kommentar

Auf Heise Online ist folgender Beitrag veröffentlicht worden: Heise Beitrag passwörter geleakt Ich bin mir jetzt nicht ganz sicher, ...

Microsoft Office
TEAMS - Skype for business
Tipp von Nebellicht vor 9 StundenMicrosoft Office

Hallo, ms ersetzt Skype for business durch TEAMS. Also, nicht wundern wenn mit der OFFICE365 Umgebung kein Skype for ...

Windows 10

Windows 10: Cortana und die Suche gehen bald wieder eigene Wege

Information von Frank vor 13 StundenWindows 102 Kommentare

Microsoft hat einen neuen Insider Build von Windows 10 veröffentlicht (Fast Ring, Version 18317), wo die digitale Assistentin "Cortana" ...

Heiß diskutierte Inhalte
Windows Server
Uhren gehen immer wieder falsch
Frage von killtecWindows Server23 Kommentare

Hallo, ich habe folgende Konstellation: 1. Physischer DC Div. Virtuelle DC's auf Hyper-V Servern Die Hyper-V-Server, der Physische DC ...

Switche und Hubs
Medienkonverter mit 12 oder 24 Ports gesucht
Frage von wmuellerSwitche und Hubs20 Kommentare

Guten Morgen, ich bin auf der Suche nach einem größeren Medienkonverter, der "stumpf" 1:1 die Ports auf über ein ...

Windows Server
Client in die Domäne einbinden - Allgemeine Frage dazu
gelöst Frage von RalphTWindows Server18 Kommentare

Moin, ich habe 2 DCs in einer Hauptstelle und 2 DCs in einer Nebenstelle. Ich bringe in der Hauptstelle ...

Windows 10
VM wächst schnell von 14 auf 35 GB an - warum?
Frage von degudejungWindows 1018 Kommentare

Hallo, ich bin ein Freund schlanker VMs und setze daher gerne mit dem Erscheinen einer neuen Win10 Version - ...