2011-09-23 6 views
3

텍스트 파일을 구문 분석하려고하는데 비어있는 경우 열을 건너 뛰는 것과는 별도로 작동합니다. 당신이 볼 수 있듯이, 탭 문자로 구분 14 개의 항목이 있습니다DOS 배치 파일이 FOR DELIM을 건너 뜁니다.

206695844 66583369 L CAT 1 1 4144042 214857  64378180 L 4144039 214853 Y 
206669467 127810625 R CAT 38 1 4136724 213413  724749204 R 4136727 213420 Y 
206445106 65588013 L CAT 4 1 4139084 210381  64363708 L 4139082 210372 Y 

                 ^
                empty column 

: 다음은 파일 형식입니다.

내 구문 분석 라인은 다음과 같습니다

FOR /F "tokens=1,2,5,7,8,9" %%i in (datafile.txt) DO (
    echo %%i %%j %%k %%l %%m %%n >> outputDatafile.txt 
) 

문제가 (예를 들어 빈) 9 열을 건너 뛰는과 같이 대신 10을 사용하고 있습니다 : 내가을 원하는

206695844 66583369 1 4144042 214857 64378180 

그 9 번째 열 - 비어있는 경우에도! 용에 대한 도움말은 말한다 때문에

또한, 구분 기호로 명시 탭 문자를 사용하여 시도했다 :

delims = xxx는
는 - 분리 문자 집합을 지정합니다.

FOR /F "tokens=1,2,5,7,8,9* delims= " %%i in (datafile.txt) DO (
            ^tab 

내가 잘못 뭐하는 거지 :이 공간과 탭 세트의 기본 구분 기호를 대체?


편집

젭은있어 - 감사합니다!

내 파일에 결과를 뱉어, 난 그냥 사용

echo (!col1!%tab%!col2!%tab%!col3!%tab%!col4!%tab%!col5!%tab%!col6!) >> outputFile.txt 
+0

정말 MS-DOS를 사용하고 있습니까? FOR/F는 "배치 언어" –

+0

아의 현대 Windows 구현에서만 지원됩니다. 음, 아마도 좋은 지적 일 수 있습니다. 이것은 Win 7의 cmd 쉘에서 실행 중입니다. 그것은 새로운 맛입니다. 나는 그 꼬리표를 제거해야합니까? – DefenestrationDay

+0

태그를 제거하고 Windows-7 태그를 추가했습니다. –

답변

2

DELIM 메커니즘은 하나 개 광석 이상의 연속 delims가 하나의 DELIM로 감소되는 방식으로 작동 당신이 얻을 수없는 이유, 그건 이 방법으로 빈 열.

그러나 귀하의 경우에는 delim을 delim과 none delim 문자로 쉽게 대체 할 수 있습니다.
처럼 : 당신은 심지어 "빈"열을 얻을 수 있도록 set "line=#!line:<TAB>=<TAB>#!"

그런 다음 각각의 열이하는 # 접두어된다.
항상 첫 번째 문자 만 제거하면됩니다.

setlocal EnableDelayedExpansion 
set "tab= " 
FOR /F "delims=" %%L in (datafile.txt) DO (
    set "line=%%L" 
    set "line=#!line:%TAB%=%TAB%#!" 
    for /F "tokens=1,2,5,7,8,9 delims=%TAB%" %%1 in ("!line!") DO (
    echo %%1, %%2, %%3, %%4, %%5, %%6 
    set "col1=%%1" 
    set "col1=!col1:~1!" 
    echo(!col1! 
) 
) 
관련 문제