저는 주로 문자열 파싱을할때 strtok를 사용합니다.
하지만 명령라인에 들어오는 부분에 대한 파싱이라면 조금 변형을하면 되지않을까
싶은데요.
즉, 구분자인 ' ', '<', '>', '|', '='...등을 미리 token으로 정해놓고 그것이 발견되면
이전까지의 문자열을 받아들이는 알고리즘에 추가적으로 읽어온 문자열의 길이를
구하고 원본 문자열의 그 위치만큼 읽어온 문자열의 합만큼 이동을하게하면 원하는
구분자도 구할 수 있을겁니다.
저라면 C언어를 사용하서 위와같은 로직으로 작성했을것 같네요. :)
space로 구분이 되는 거라면 strtok으로 간단하게 해결됩니다.
space로 구분이 되는 거라면 strtok으로 간단하게 해결됩니다.
그게 아니라면 직접 짜시던지 너무 복잡하다면 yacc등을 써야 하지 않을까요?
^^
위와 같은 형식으로 파싱하시는 거라면
무식하게 파싱하는 함수 만드시는게 편하실겁니다 :D
-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com
C++ 라면 boost 의 tokenizer 가 아주 좋습니다.[
C++ 라면 boost 의 tokenizer 가 아주 좋습니다.
http://boost.org/libs/tokenizer/index.html
원하시는 구분자로 (쉼표, 공백 등) 구분할 수 있고, 구분자와 같이 혹은 없애고 반복자로 다음 문자를 찾게됩니다.
저자의 말로는 strtok 의 일반형이라고 하는데, 쓰레드 안전하다는 것도 좋고 반복자 형태를 지원해서 써먹기도 나름대로 좋고... 이것저것 생각해보아도 tokenizer 써보니 좋았습니다.
답변 감사 합니다.구분은 space 로 하면 힘들더군요.인
답변 감사 합니다.
구분은 space 로 하면 힘들더군요.
인자가 있는 명령어일경우 제대로 파싱이 되지 않아서
< , > , | 로 해야 하거든요
간단한 쉘 프로그래밍이라
파이프 , I/O redirection 정도만 하면 될것 같긴한데
좀 힘드네요..
저는 주로 문자열 파싱을할때 strtok를 사용합니다.하지만 명령라인
저는 주로 문자열 파싱을할때 strtok를 사용합니다.
하지만 명령라인에 들어오는 부분에 대한 파싱이라면 조금 변형을하면 되지않을까
싶은데요.
즉, 구분자인 ' ', '<', '>', '|', '='...등을 미리 token으로 정해놓고 그것이 발견되면
이전까지의 문자열을 받아들이는 알고리즘에 추가적으로 읽어온 문자열의 길이를
구하고 원본 문자열의 그 위치만큼 읽어온 문자열의 합만큼 이동을하게하면 원하는
구분자도 구할 수 있을겁니다.
저라면 C언어를 사용하서 위와같은 로직으로 작성했을것 같네요. :)
------------------------------
좋은 하루 되세요.
strtok 보다는 strtok_r 이나 strsep 를 권장합니다.
strtok 보다는 strtok_r 이나 strsep 를 권장합니다.
man page 에서도 strtok 보다는 strtok_r 이나 strsep 를 쓰라고 권장합니다. (glibc man page 에는 그런데, 다른 데서는 어떤지 모르겠군요.)
strtok는 쓰레드 safe 하지 않습니다.strtok_r는 saf
strtok는 쓰레드 safe 하지 않습니다.
strtok_r는 safe 하지요. 그래서 권장하지요.
The Future !!!
저같은 경우는 정형화된 문자열 파싱에는 대부분 PCRE를 사용합니다.
저같은 경우는 정형화된 문자열 파싱에는 대부분 PCRE를 사용합니다.
strtok_r도 가끔 사용하긴 하는데,
pcre가 더 편하더군요.
댓글 달기