2016-06-07 2 views
1

배치 스크립트를 사용하여 .h 파일을 분석하려고합니다. .H 파일에서 일부 구조체는 아마도 다음과 같이있다 : 당신이 볼 수 있듯이배치에서 "*"파일에서 올바르게 읽을 수 없습니다

typedef struct _sample { 
    int *a; 
    char* b; 
    float * c; 
} Sample; 

는, "*"어디서든 데이터 타입과 멤버 이름 사이에있을 수 있습니다. 그것이 내가 내 .BAT 파일에 쓴 것입니다 아래 (간체) :

for /F "tokens=*" %%i in (sample.h) do (
    for %%j in (%%i) do echo %%j 
) 

이 박쥐 내가 그것을 단순화했기 때문에 그것을 읽고 모든 단어를 에코한다 무엇. 결과는 다음과 같습니다

typedef 
struct 
_sample 
{ 
int   ::"*a" is skipped 
b   ::"char*" is skipped 
float 
sample.bat ::"*" is solved as reading current path files 
sample.h 
c 
} 
Sample 

그래서 질문입니다 : 어떻게 "*"제대로와 포인터 선언의이 3 가지를 분석 할 수 있습니까?

tokens=x,y,m-n - specifies which tokens from each line are to 
        be passed to the for body for each iteration. 
        This will cause additional variable names to 
        be allocated. The m-n form is a range, 

참고이 부분 : for가 와일드 카드로 *?를 해석하고이를 확장

    specifying the mth through the nth tokens. If 
        the last character in the tokens= string is an 
        asterisk, then an additional variable is 
        allocated and receives the remaining text on 
        the line after the last token parsed. 
+0

프레인 'for' 루프 사용'* '(또한'? ')는 와일드 카드의'in' 키워드 후의 모든 항목은 포함되어 있으면되므로'for' 파일 시스템 및 검색 액세스 일치하는 항목의 경우, 그 경우에 반환됩니다. 와일드 카드가 사용되지 않으면 파일 시스템에 액세스 할 수없고 항목은'for'에 의해 직접 반환됩니다 ... – aschipfl

+0

이것은 cmd 스크립팅의 큰 단계이지만 코드를 실제로 분석하려면 ANTLR이 좋을 것입니다 선택. C 언어 구문을 크게 지원합니다. http://www.antlr.org/ – lit

답변

-1

매트에 칭 파일 이름. 이를 해결하기 위해, 당신은 for 루프 외부의 문자열을 해석해야합니다 당신이 C 코드를 구문 분석하려고하면

@echo off 
for /F "delims=" %%i in (t.txt) do call :doit %%i 
goto :eof 

:doit 
if "%1"=="" goto :eof 
echo %1 
shift 
goto :doit 
+1

이것은 질문에 대답하지 않습니다! 실제 문제는 와일드 카드처럼'*'(그리고'?')를 사용하는 일반'for' 루프입니다 ... – aschipfl

1

aschipfl 말한대로 for /? 출력으로 당

+0

좋은 첫 번째 샷이지만 임의의 텍스트를 가진 C 코드의 경우 오류가 발생하기 쉽습니다. 예를 들어'if (val & 1) printf ("val & 1 is true"); ' – jeb

0

, 당신은보다 안정적인 버전을 사용해야합니다.
FOR/F는 빈 줄과 ;으로 시작하는 줄을 삭제합니다.

또한 라인 자체의 분할은 안전한 방법으로 줄 바꿈을 사용하여 수행 할 수 있습니다.

setlocal DisableDelayedExpansion 
(set \n=^ 
%=EMPTY=% 
) 
for /F "usebackq delims=" %%L in (`findstr /n "^" t2.txt`) do (
    set "line=%%L" 
    setlocal EnableDelayedExpansion 
    set "line=!line:*:=!" 
    echo LINE: !line! 
    FOR %%N in ("!\n!") do set "parts= !line: =%%~N !" 
    FOR /F "delims=" %%p in ("!parts!") do (
     echo( %%p 
    ) 
    endlocal 
) 
+0

고마워요! 잘 작동합니다! – pcler

관련 문제