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, 5670 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
E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 1 TagE-Mail6 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 1 TagHyper-V

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 1 TagSicherheits-Tools1 Kommentar

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Server-Hardware

Lösung für Ersatz eines defekter Raid-Controllers

Anleitung von wellknown vor 1 TagServer-Hardware4 Kommentare

Hallo, da ich nichts gefunden habe und selbst eine Lösung brauchte, hier eine kleine Anleitung für alle die vor ...

Heiß diskutierte Inhalte
Windows Server
Mit der alten Domäneprofil anmelden ohne Server
gelöst Frage von SyosseWindows Server37 Kommentare

Hallo Jungs Folgendes Szenario: Ich habe bei einem sehr kleinen Unternehmen (2Personen) den Server migriert, soweit hat alles geklappt. ...

Sicherheits-Tools
Virenprogramm lässt Programme nicht starten
Frage von SurferGirlSicherheits-Tools23 Kommentare

Hallo, ich bin neu hier, ich hoffe ich habe die richtige Rubrik gewählt. Falls nicht, tut es mir leid. ...

Windows Server
SQL Server Instanz (Eplan) auf WIN 2008 RC2 Server frisst RAM ohne Limit
Frage von derinderinderinWindows Server17 Kommentare

Hallo Zusammen, Wir haben hier einen Windows 2008 RC2 Server. Darauf läuft ein SQL Server Express 2014 Version 12.0.4232.0. ...

Windows 10
Best Practice für Schulungsräume
Frage von Sn0wFoxWindows 1016 Kommentare

Hallo, leider bin ich auch nach langer Suche nicht auf eine zufriedenstellende Nicht-Cloud-Lösung gestoßen und wollte mal Fragen ob ...