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, 3382 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 ...

Batch & Shell
gelöst Per Batch in ausgewählte oder vorgeschriebene Zeile einer .txt schreiben (6)

Frage von pdiddo zum Thema Batch & Shell ...

Batch & Shell
gelöst Doppelte Dateneinträge per Batch aus Datei löschen? HILFE (7)

Frage von freshman2017 zum Thema Batch & Shell ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(10)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Heiß diskutierte Inhalte
Windows 10
Windows für Privatanwender "nicht mehr handhabbar" (26)

Frage von FA-jka zum Thema Windows 10 ...

LAN, WAN, Wireless
Brauche Hilfe: Mit (schnellem) WLAN Strecke überbrücken (23)

Frage von pierrehansen zum Thema LAN, WAN, Wireless ...

Basic
Programmierung von Windows Programmen (10)

Frage von Ghost108 zum Thema Basic ...