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, 3231 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst PowerShell: Spalten tauschen und neue Spalten in CSV datei erzeugen (17)

Frage von Rippchen zum Thema Batch & Shell ...

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

Frage von MariaElena zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...