Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Mit batch aus CSV Datei bestimmte Spalten ausschneiden und in neue TXT Datei einfügen

Frage Entwicklung Batch & Shell

Mitglied: viking

viking (Level 1) - Jetzt verbinden

26.09.2012 um 19:11 Uhr, 3326 Aufrufe, 4 Kommentare

Hallo, hab wieder mal eine Frage an die Experten, ...

Ich habe eine CSV Datei (c:/temp/test.csv)
Diese Datei hat viele Spalten (252 Spalten)und ich benötige nur bestimmte davon.
Die Datei hat viele Zeilen.

Nun benötige ich eine neue Datei (c:/temp/Ergebnis.txt (Tabulator als Trennzeichen)
Aus der Ursprungsdatei sollen aber nur folgende Spalten übergeben werden.
Spalte 1, Spalte 121 bis Spalte 144, Spalte 209 bis Spalte 232.
Alle anderen Spalten benötige ich nicht.

Wie kann ich das lösen?

Alternativ würde mich noch interessieren, wie ich es lösen kann, wenn ich folgendes erreichen will:
Das auslesen von Spalte 1 sowie Spalte 16 und Spalte 17.
Also nur dies drei Spalten in eine Textdatei, der Rest interessiert nicht.



Danke viking
Mitglied: pieh-ejdsch
26.09.2012, aktualisiert um 19:50 Uhr
Bitte warten ..
Mitglied: viking
26.09.2012 um 23:35 Uhr
Hallo Phil,
hab mir das angesehen, ..., ist zwar ähnlich, aber soweit ich das verstanden habe war in dem Beispiel von nur einer Spalte die Rede.

Ich benötige im Gegensatz zum verlinkten Beispiel mehrere Spalten, die nicht nebeneinander stehen.
Also ums einfach zu halten Spalte 1, 16 und 17.

... mit dem verlinkten Beispiel komme ich nicht weiter.

Gruß Viking
Bitte warten ..
Mitglied: pieh-ejdsch
27.09.2012, aktualisiert um 12:33 Uhr
hallo Viking,

genau diesen Batch meinte ich. Ähnlich? Der Tut genau was Du möchtest.
Ich schreibe doch gar nicht so undeutlich!
Pass die Variablen InFile OutFile sowie Cells an.

Hier ist nochmal eine Version direkt zur Verwendung im CMD Fenster.
Eine Hilfe und Fehlerbehandlung ist enthalten:
CSV-extrakt.cmd
01.
@echo off 
02.
setlocal disabledelayedexpansion 
03.
 
04.
 :: echo on 
05.
 
06.
if "%~1" equ "/?" echo Extrahiert die angegebenen Spalten aus einer mit Semikolon unterteilten Datei.^ 
07.
 & echo(^ 
08.
 & <nul set /p "=%~n0 " &echo Quelle [Ziel] /T:[x ^| TAB] /C:n [n ...]&echo(^ 
09.
 & echo    /T:x      Angabe eines anderen TrennZeichens x,^ 
10.
 & echo    /T:        Bei Leerzeichn wird nichts angegeben.^ 
11.
 & echo    /T:TAB    Angabe um Tabulator als Trennzeichen zu nehmen.^ 
12.
 & echo    /C:n      Angabe der Zelle^(n^)/Spalte^(n^) &exit /b 0 
13.
 
14.
for %%i in (Cin Cells InFile OutFile ) do set "%%i=" 
15.
set "T=;" 
16.
for %%i in (%* ) do ( 
17.
  set "No=" 
18.
  for /f "tokens=1*delims=:" %%i in ("%%~i" ) do ( 
19.
    if defined Cin set "No=1" &call set "Cells=%%cells%%%%~i %%~j " 
20.
    if /i "%%~i" equ "/C" set "No=1" &set "Cin=1" &set "Cells=%%~j " 
21.
    if /i "%%~i" equ "/T" set "No=1" &if /i "%%~j" equ "TAB" (set "T=	") else set "T=%%~j" 
22.
23.
  if not defined No ( 
24.
    if defined InFile if not defined OutFile set "Outfile=%%~i" 
25.
    if not defined InFile set "Infile=%%~i" 
26.
) ) 
27.
find "" "%Infile%" |find "---------- " >nul ||echo FEHLER: "%InFile%" >&2 &&exit /b 1 
28.
if not defined Cells echo FEHLER: Keine Zelle!& exit /b 2 
29.
echo  %Cells% |findstr /rc:" 00*" >nul &&echo FEHLER: Zelle 0 1>&2 &&exit /b 2 
30.
setlocal enabledelayedexpansion 
31.
set "N=1" 
32.
for %%i in (!cells! ) do if %%~i lss !N! (echo FEHLER: folgende Zellenauswahl kleiner^^! & exit /b 2) else (set /a "N=%%~i") ||exit /b 2 
33.
endlocal 
34.
 
35.
if defined T set "T=%T:~0,1%" 
36.
if not defined T set "T= "  
37.
if defined Outfile (set "Um=>") else set "Um=" 
38.
%Um% %OUTFILE% ( 
39.
for /f usebackqDelims^=^ eol^= %%i in ("%Infile%") do ( 
40.
	set Line="%%i" 
41.
	set "cell=0" 
42.
	set "incell=0" 
43.
	set "check=1" 
44.
	call :ReadCell %cells% 
45.
	echo( 
46.
47.
48.
goto :eof 
49.
 
50.
:ReadCell 
51.
if %incell% neq 0 if %incell% equ %1 ( 
52.
	<nul set /p =" 
53.
	if "%2" equ "" goto :eof 
54.
	<nul set /p ="%T%" 
55.
	set /a "cell =%2-%1" 
56.
	shift 
57.
)  
58.
if %cell% equ 0 set /a cell =%1 
59.
2>nul set /a x=1/((cell-1)/30) && set /a Cell -=30 , Token=30 || set /a Token=Cell 
60.
set /a incell +=Token 
61.
setlocal enabledelayedexpansion 
62.
if defined check set "Line=!Line:%T%="%T%"!" 
63.
for /f "Tokens=%Token%* delims=%T%" %%a in ("!Line!") do endlocal&(set "Line=%%b" 
64.
	if %incell% equ %1 <nul set /p ="%%~a" 
65.
	set "ChecK=" 
66.
	goto :ReadCell 
67.
)
Dazu nochmal ein Test auf der CMD-Line:
> >datei (for %i in (a b c d e f g h i k l m n o p q r s t u ) do @(for /l %a in (1 1 300) do @(<nul set /p "=Zeile %i-Spalte %a;")) &echo() 
 
>CSV-extrakt datei /C: 73 201 
Zeile a-Spalte 73;Zeile a-Spalte 201 
Zeile b-Spalte 73;Zeile b-Spalte 201 
Zeile c-Spalte 73;Zeile c-Spalte 201 
Zeile d-Spalte 73;Zeile d-Spalte 201 
Zeile e-Spalte 73;Zeile e-Spalte 201 
Zeile f-Spalte 73;Zeile f-Spalte 201 
Zeile g-Spalte 73;Zeile g-Spalte 201 
Zeile h-Spalte 73;Zeile h-Spalte 201 
Zeile i-Spalte 73;Zeile i-Spalte 201 
Zeile k-Spalte 73;Zeile k-Spalte 201 
Zeile l-Spalte 73;Zeile l-Spalte 201 
Zeile m-Spalte 73;Zeile m-Spalte 201 
Zeile n-Spalte 73;Zeile n-Spalte 201 
Zeile o-Spalte 73;Zeile o-Spalte 201 
Zeile p-Spalte 73;Zeile p-Spalte 201 
Zeile q-Spalte 73;Zeile q-Spalte 201 
Zeile r-Spalte 73;Zeile r-Spalte 201 
Zeile s-Spalte 73;Zeile s-Spalte 201 
Zeile t-Spalte 73;Zeile t-Spalte 201 
Zeile u-Spalte 73;Zeile u-Spalte 201 
 
>
[Edit]
Trennzeichenauswahl eingefügt.
[/Edit]

Gruß Phil
Bitte warten ..
Mitglied: Knorkator
27.09.2012 um 13:41 Uhr
Mit der Powershell kann man zumindest den 2. Teil Deiner Frage schnell lösen.
01.
Import-Csv C:\Test\beispiel.csv -Delimiter `t | select Stunde, Dienstag |  Export-csv c:\Test\Ergebnis.txt -Delimiter `t -NoTypeInformation -Encoding Unicode 
02.
 
Import Unterscheidung per -Delimiter ";" oder -Delimiter "," oder -Delimiter `t
http://powershell.n3tblog.de/2009/09/09/import-csv/

Der 1. Teil lässt sich auch damit lösen, allerdings kenne ich keine Möglichkeit, Spalte 121-144 ohne viel Schreibaufwand zu integrieren. Evtl. hat ja da noch nen PS Profi einen Tipp, würde mich auch interessieren.
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Datenbanken
Access 2016 vertauscht Monat und Tag in meiner CSV Datei (1)

Frage von iGordon zum Thema Datenbanken ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(6)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Heiß diskutierte Inhalte
Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Batch & Shell
gelöst Batch um Benutzer aus Sitzung abzumelden (15)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Linux
gelöst Google Chrome startet nicht (12)

Frage von Thomas91 zum Thema Linux ...