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 Per batch datei CSV auslesen

Mitglied: Newplay123

Newplay123 (Level 1) - Jetzt verbinden

27.05.2019 um 20:27 Uhr, 473 Aufrufe, 10 Kommentare

Hallo, ich will mit einer Batch dabei eine .csv datei auslesen.
Dafür benutzt ich diesen Code:

01.
@echo off
02.
:einmal
03.
echo Line: 
04.
set /P Line=Line:
05.
set LineNo=%Line%
06.
set ColNo=7
07.
set "Hinein="
08.
set /a LineNo-=1
09.
for /f "delims=; tokens=%ColNo%" %%a in ('more/e +%LineNo% ^< C:\Users\jafrd\ST_Programm\TEMP\import_30.csv') do (
10.
  if not defined Hinein set "Hinein=%%a"
11.
)
12.
set Hinein=%Hinein%
13.
echo %Hinein%
14.

15.

16.
goto einmal
In der CSV datei stehen (über excel geöffnet) dabei in der 7. Spalte die Uhrzeiten.
Die Tabelle sieht ungefähr so aus

1.Zeile 16:00
2.Zeile 14:32
3.Zeile (nichts)
4.Zeile 17:00

wenn ich jetzt sage ich will, den wert von Zeile1 herausfinden,dann kommt am Ende auch "16:00" raus, wenn ich aber Zeile3 auswähle, dann kommt auf einmal "17:00" raus, obwohl dies erst in Zeile4 steht. Wenn ich jetzt Zeile4 auswähle kommt auch hier (diesmal ist es ja richt) die "17:00" raus. Warum sagt er für leere Zeilen immer das an was in der nächst beschriebenden Zeile darunterstehend an?
Egal wieviele Zeilen dazwischen sind.


Das gleiche hab ich auch in Spalte6 stehen, hier funktioniert es aber und für leere Zeilen gibt er hier "0:00" raus.

Mit freundlichen Grüßen,
Newplay123
Mitglied: rubberman
27.05.2019, aktualisiert um 22:11 Uhr
Leere Zeilen werden von FOR /F Schleifen ignoriert. Selbst wenn das nicht der Fall wäre - du prüfst mit if not defined ob die Variable definiert wurde. Was sollte dann bei einer Leerzeile passieren? Sie bleibt undefiniert, sodass die nächste Zeile gelesen werden würde.

Probiere:
01.
@echo off &setlocal
02.
:einmal
03.
set /p "LineNo=Line: "
04.
set /a "ColNo=7, LineNo-=1"
05.
set "Hinein="
06.
set "Skip="
07.
if %LineNo% gtr 0 set "Skip=skip=%LineNo% "
08.

09.
for /f "%Skip%tokens=1,%ColNo% delims=;" %%a in ('findstr /n "^" "test.csv"') do (
10.
  set "Hinein=%%b"
11.
  goto end_for
12.
)
13.
:end_for
14.

15.
echo(%Hinein%
16.

17.
goto einmal
CSV Daten mit Batch zu parsen ist und bleibt riskant. Bei leeren Datenfeldern folgen Semikola aufeinander, die aber von FOR /F wie ein einzelnes Trennzeichen behandelt werden und die Anzahl Tokens durcheinander bringt.

Steffen
Bitte warten ..
Mitglied: erikro
28.05.2019 um 09:18 Uhr
Moin,

Zitat von rubberman:
CSV Daten mit Batch zu parsen ist und bleibt riskant. Bei leeren Datenfeldern folgen Semikola aufeinander, die aber von FOR /F wie ein einzelnes Trennzeichen behandelt werden und die Anzahl Tokens durcheinander bringt.


Jo und anstrengend, nervig, fehleranfällig ... Deshalb sollte man dafür die Powershell nehmen. Da sieht das dann (ungefähr) so aus:

01.
import-csv datei.csv -delimiter ";" -encoding utf8 | %{write-output $_.wieauchimmerdieSpalteheisst}
Schlanker, schneller und leere Datenfelder stören nicht weiter.

hth

Erik
Bitte warten ..
Mitglied: Newplay123
29.05.2019 um 15:06 Uhr
Zitat von rubberman:

Leere Zeilen werden von FOR /F Schleifen ignoriert. Selbst wenn das nicht der Fall wäre - du prüfst mit if not defined ob die Variable definiert wurde. Was sollte dann bei einer Leerzeile passieren? Sie bleibt undefiniert, sodass die nächste Zeile gelesen werden würde.

Probiere:
01.
@echo off &setlocal
02.
> :einmal
03.
> set /p "LineNo=Line: "
04.
> set /a "ColNo=7, LineNo-=1"
05.
> set "Hinein="
06.
> set "Skip="
07.
> if %LineNo% gtr 0 set "Skip=skip=%LineNo% "
08.
> 
09.
> for /f "%Skip%tokens=1,%ColNo% delims=;" %%a in ('findstr /n "^" "test.csv"') do (
10.
>   set "Hinein=%%b"
11.
>   goto end_for
12.
> )
13.
> :end_for
14.
> 
15.
> echo(%Hinein%
16.
> 
17.
> goto einmal
18.
> 
CSV Daten mit Batch zu parsen ist und bleibt riskant. Bei leeren Datenfeldern folgen Semikola aufeinander, die aber von FOR /F wie ein einzelnes Trennzeichen behandelt werden und die Anzahl Tokens durcheinander bringt.

Steffen



Dann wird ja jetzt, wenn nichts in einer Zeile steht auch nichts ausgegeben.
Was muss ich machen, damit statt des nichts eine "0:00" ausgegeben wird für die Zeilen in den nichts drin steht ?

Jan
Bitte warten ..
Mitglied: 139920
29.05.2019, aktualisiert um 15:16 Uhr
Was muss ich machen, damit statt des nichts eine "0:00" ausgegeben wird für die Zeilen in den nichts drin steht ?
Indem du vorher per Skript alle direkt aufeinander folgenden Semikolons (;;) durch ;0:00; ersetzt
https://stackoverflow.com/questions/23075953/batch-script-to-find-and-re ...
Bitte warten ..
Mitglied: erikro
29.05.2019 um 15:11 Uhr
Moin,


mit der Powershell:

01.
import-csv datei.csv -delimiter ";" -encoding utf8 | %{if($_.wieauchimmerdieSpalteheisst) {write-output $_.wieauchimmerdieSpalteheisst} else {write-output "0:00"}}
hth

Erik
Bitte warten ..
Mitglied: Newplay123
29.05.2019 um 16:19 Uhr
Zitat von erikro:

Moin,


mit der Powershell:

01.
> import-csv datei.csv -delimiter ";" -encoding utf8 | %{if($_.wieauchimmerdieSpalteheisst) {write-output $_.wieauchimmerdieSpalteheisst} else {write-output "0:00"}}
02.
> 
hth

Erik


sorry das ich nochmal frage , aber wie kann ich damit jede einzelne Zeile in variablen abspeichern ? Ich will sie nicht nur ausgeben, sondern jede einzelne zeile abspeichern.

Jan
Bitte warten ..
Mitglied: 139920
29.05.2019, aktualisiert um 16:39 Uhr
Zitat von Newplay123:
sorry das ich nochmal frage , aber wie kann ich damit jede einzelne Zeile in variablen abspeichern ? Ich will sie nicht nur ausgeben, sondern jede einzelne zeile abspeichern.

Die Daten stehen ja in einem Array, die Daten kannst du ganz einfach über den Index ansprechen, Powershell ist ja im Gegensatz zu Batch eine Objektorientierte sprache:
01.
[int]$line = read-host "Zeile eingeben"
02.
$csv = import-csv datei_rein.csv -delimiter ";"
03.
$csv[($line - 1)] | ConvertTo-Csv -NoType -Delimiter ";" | select -Skip 1 | Set-Content datei_raus.csv
Bitte warten ..
Mitglied: Newplay123
30.05.2019 um 13:09 Uhr
Zitat von 139920:

Zitat von Newplay123:
sorry das ich nochmal frage , aber wie kann ich damit jede einzelne Zeile in variablen abspeichern ? Ich will sie nicht nur ausgeben, sondern jede einzelne zeile abspeichern.

Die Daten stehen ja in einem Array, die Daten kannst du ganz einfach über den Index ansprechen, Powershell ist ja im Gegensatz zu Batch eine Objektorientierte sprache:
01.
> [int]$line = read-host "Zeile eingeben"
02.
> $csv = import-csv datei_rein.csv -delimiter ";"
03.
> $csv[($line - 1)] | ConvertTo-Csv -NoType -Delimiter ";" | select -Skip 1 | Set-Content datei_raus.csv
04.
> 


Aber das gibt mir ja eine Zeile immer raus. Ich brauche aber das ich jedes Feld einzeln ausgeben kann. Das ich also Zeile, aber auch Spalte definieren kann.

Jan
Bitte warten ..
Mitglied: 139920
LÖSUNG 30.05.2019, aktualisiert um 13:14 Uhr
Zitat von Newplay123:

Zitat von 139920:

Zitat von Newplay123:
sorry das ich nochmal frage , aber wie kann ich damit jede einzelne Zeile in variablen abspeichern ? Ich will sie nicht nur ausgeben, sondern jede einzelne zeile abspeichern.

Die Daten stehen ja in einem Array, die Daten kannst du ganz einfach über den Index ansprechen, Powershell ist ja im Gegensatz zu Batch eine Objektorientierte sprache:
01.
>> [int]$line = read-host "Zeile eingeben"
02.
>> $csv = import-csv datei_rein.csv -delimiter ";"
03.
>> $csv[($line - 1)] | ConvertTo-Csv -NoType -Delimiter ";" | select -Skip 1 | Set-Content datei_raus.csv
04.
>> 


Aber das gibt mir ja eine Zeile immer raus. Ich brauche aber das ich jedes Feld einzeln ausgeben kann. Das ich also Zeile, aber auch Spalte definieren kann.
Na und wo ist das Problem, das ist doch ne Fingerübung, einfach mit Select die entsprechend benannte Spalte auswählen lassen:
01.
[int]$line = read-host "Zeile eingeben"
02.
$spaltenname = read-host "Name der Spaltenüberschrift eingeben(nicht den Index)"
03.
$csv = import-csv datei_rein.csv -delimiter ";"
04.
$csv[($line - 1)] | select -Property $spaltenname | ConvertTo-Csv -NoType -Delimiter ";" | select -Skip 1 | Set-Content datei_raus.csv
https://www.google.com/search?q=Powershell+Tutorial
Bitte warten ..
Mitglied: Newplay123
30.05.2019 um 15:06 Uhr
Zitat von 139920:

Zitat von Newplay123:

Zitat von 139920:

Zitat von Newplay123:
sorry das ich nochmal frage , aber wie kann ich damit jede einzelne Zeile in variablen abspeichern ? Ich will sie nicht nur ausgeben, sondern jede einzelne zeile abspeichern.

Die Daten stehen ja in einem Array, die Daten kannst du ganz einfach über den Index ansprechen, Powershell ist ja im Gegensatz zu Batch eine Objektorientierte sprache:
01.
>>> [int]$line = read-host "Zeile eingeben"
02.
>>> $csv = import-csv datei_rein.csv -delimiter ";"
03.
>>> $csv[($line - 1)] | ConvertTo-Csv -NoType -Delimiter ";" | select -Skip 1 | Set-Content datei_raus.csv
04.
>>> 


Aber das gibt mir ja eine Zeile immer raus. Ich brauche aber das ich jedes Feld einzeln ausgeben kann. Das ich also Zeile, aber auch Spalte definieren kann.
Na und wo ist das Problem, das ist doch ne Fingerübung, einfach mit Select die entsprechend benannte Spalte auswählen lassen:
01.
> [int]$line = read-host "Zeile eingeben"
02.
> $spaltenname = read-host "Name der Spaltenüberschrift eingeben(nicht den Index)"
03.
> $csv = import-csv datei_rein.csv -delimiter ";"
04.
> $csv[($line - 1)] | select -Property $spaltenname | ConvertTo-Csv -NoType -Delimiter ";" | select -Skip 1 | Set-Content datei_raus.csv
05.
> 
https://www.google.com/search?q=Powershell+Tutorial

Danke, hat super Funktioniert !!

Danke auch an alle anderen.

Jan
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch : CSV-Datei als Variable speichern
gelöst Frage von Newplay123Batch & Shell1 Kommentar

Hallo, ich versuche dies jetzt schon seid ewigkeiten hinzubekommen. Entweder ich bin zu doof zum googlen oder es geht ...

Batch & Shell

Batch Datei um eine CSV zu bearbeiten und umzuformatieren

gelöst Frage von BranpoBatch & Shell3 Kommentare

Guten Abend, ich habe eine CSV Liste die folgendermaßen aussieht: MYL: 92.18 TEVA: 91.51 LEG: 90.63 FLR: 88.74 GLD: ...

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
Erkennung und -Abwehr

TrendMicro Worry-Free Business Security 10.0 SP1 WFBS - Deutsch (mit Windows 10 1903-Support -May-Update) ist verfügbar!

Tipp von VGem-e vor 3 StundenErkennung und -Abwehr

Moin, endlich ist es seitens des Anbieters so weit: Danke natürlich auch an TrinXx, der schon vor 2 Tagen ...

Windows 10

"Windows 10 Pro V1903: Gruppenrichtlinie "Telemetrie zulassen" aktivierbar?"

Tipp von Snowbird vor 21 StundenWindows 102 Kommentare

Sicherheits-Tools

TrendMicro Worry-Free Business Security 10.0 SP1 - Jetzt in Deutsch verfügbar! (Windows 10 1903 Support)

Tipp von TrinXx vor 2 TagenSicherheits-Tools1 Kommentar

Moin! Nach wochenlangem Warten wird Trend Micro das SP1 für WFBS 10 voraussichtlich am 26.08.19 veröffentlichen. Ich habe das ...

Hyper-V
Setup VM W2016 startet nicht in Hyper-V 2016
Erfahrungsbericht von keine-ahnung vor 3 TagenHyper-V9 Kommentare

Moin, sitze gerade über meinem neuen Server und versuche, die VM auf den Host zu prügeln. Jetzt wollte ich ...

Heiß diskutierte Inhalte
Server
Ein Server ins Haus stellen. Was brauche ich dafür?
Frage von JoschiTomServer15 Kommentare

Hallo Community, ich spiele mit dem Gedanken eine Server mir zu holen. Was brauche ich dafür? Und wie sind ...

LAN, WAN, Wireless
Mikrotik Gast-Wlan keine Verbindung zum Internet?
Frage von dirkschwarzLAN, WAN, Wireless11 Kommentare

Guten Morgen, habe ein wahrscheinlich einfaches Problem, bei dem ich aber nicht wirklich weiter komme Ich möchte ein Gast-Wlan ...

Windows Server
GPOs nur auf Terminalserver User und nicht andere Computer ausführen
Frage von roeggiWindows Server8 Kommentare

Ich habe einen Windows Server 2019 als Terminal Server. da es momentan nicht so einfach ist im Startmenü Programme ...

Router & Routing
Eu-Domain von Rechnern nicht, vom Handy aber (im selben Netzwerk) schon erreichbar
gelöst Frage von mary-louRouter & Routing6 Kommentare

Hallo! Für ein gemeinnütziges StartUp haben wir zwei Domains, beide liegen bei whois.com: - unseredomain.eu - unseredomain-europe.org Bislang wurde ...