2011-04-28 9 views
0

예 : 구성 파일 난 그냥 인수를 분할하는 것입니다 생각할 수있는위치에 관계없이 구성 파일의 인수는 어떻게 파싱됩니까?

CFLAGS = "xyz" 
CXXFLAGS = "xyz" 

또는

CXXFLAGS = "xyz" 
CFLAGS = "xyz" 

최저 구현이 있고 스위치에 왼쪽을 공급할 수

for line in file 
    x = line.split("=") 
    switch(x[0]) 
     case CFLAGS 
      do cflags 
     case CXXFLAGS 
      do cxxflags 

하지만 어떻게 나보다 더 많은 경험을 가진 사람들이 그것을합니까? 나는이 일을하는 오픈 소스 프로그램을 아마 알고있을 것이다. 그러나 나는이 소스를 어디에서 찾을 지조차 알지 못한다. 저는 주로 Python과 C로 프로그램을 짜 놓았습니다. 그래서 다른 언어들은 괜찮지 만 양쪽 모두 implementation/pseudocode/whattolookup이 선호 될 것입니다.

미리 감사드립니다.

P. Re, X, 정규 표현식, 정규 표현식 또는 그 파생어를 피할 수없는 경우를 제외하고는 답변에 어떤 형태로든 말하지 않도록하십시오.

답변

0

Eli Bendersky에 따르면 파이썬에서는 제공된 ConfigParser을 사용해야합니다.

자신이 직접해야한다고 주장하는 경우, 구성을 사전으로 저장하는 그의 방법이 좋습니다. 또 다른 방법은 값을 처리하고 그들과 함께 일을 할 기능과 옵션을지도하는 것입니다

# Map the options to functions to handle them. 
handlers = { 
    'CFLAGS': some_function, 
    'CXXFLAGS': other_function, 
} 

# Loop through each option. 
for line in configuration: 
    # Get the option and value. 
    option, value = line.split('=') 
    option = option.strip().upper() 
    value = value.strip() 

    # Try to find a handler and process the option. 
    handler = handlers.get(option) 
    if handler: 
     handler(option, value) 
    else: 
     raise Exception('Unknown option.') 

은 물론, 핸들러 함수는 당신이 그것을 통과하고있는 optionvalue 매개 변수를 수용 할 수 있어야합니다.

+0

값을 유용하게 사용하지 마십시오. 옵션 이름과 값을 핸들러에 전달합니다. 핸들러가 여러 관련 키를 처리 할 수 ​​있도록 허용합니다. –

+0

@Eli : 네. 그 점을 지적 해 주셔서 감사합니다. – Blair

+0

엘리엇 (나는 이미 자신의 업 폰트 중 일부를 가지고 있기 때문에)과 블레어를 받아 들였기 때문에 나는 당신의 대답을 모두 좋아했습니다. 감사 – Enders

4

파이썬에서는 ConfigParser 모듈을 사용하여 .ini과 같은 구성 파일을 구문 분석합니다.

직접 구현하여 구성 데이터를 일종의 사전으로 보는 것이 편리하다는 것을 알았습니다.

이 구성표
confdict[key] = value 

는, 구성 파일의 키의 순서는 중요하지 않습니다 그냥 같이 : 난 그냥 계속 <key> = <value> 및 업데이트에 라인을 분할 그래서 만약이 자연스럽게, 파이썬의 dicts로 변환 사전 자체에서는 중요하지 않습니다. 키 값을 조회 할 수 있다면 행복합니다. 당신이 (관련 방법은 _read이다) 예를 들어, ConfigParser의 후드 아래에 보면


, 당신이 그것을 수행 정확히 무엇을 찾을 수 있습니다. 옵션은 사전에 보관됩니다 (섹션 당 하나씩) .ini 구성 파일의 계층 구조는 한 수준입니다. 행은 정규 표현식을 사용하여 파일에서 파싱되며 위에 설명 된대로 key, value 쌍이 사전에 추가됩니다.


이것은 파이썬입니다. C에서이 작업을 수행하기위한 라이브러리가 아주 많다고 생각하지만 직접 구현하면 동일한 알고리즘을 따르게됩니다. 사전 (해시 테이블, 트리 또는 기타 중요하지는 않음)에 대한 일종의 연관 배열 데이터 구조를 사용하고 동일한 구문 분석 & 지정을 수행합니다.

관련 문제