2011-01-17 15 views
2

저는 C++에서 문제가 있습니다. 저는 여기 몇몇 전문가가 저를 도울 수 있기를 바랍니다.텍스트 파일에서 변수 읽기

문제는 .txt 파일에 몇 가지 정보가 있습니다. 이 정보를 사용하는 프로그램을 작성하고 싶습니다.

.txt 파일은 다음과 같이 될 것입니다 :

variable 1: 711 
variable 2: [8 5 6 11] 
variable 3: xyz zyx yyy 

프로그램은 파일에서 값을 읽을 다음을 사용해야합니다, 그것을 수행하는 방법 어떤 생각!?

/* UPDATE */

무엇을 수행해야하는 것은 수치 값, 변수의 숫자 값을 파일 텍스트에서 읽은 다음 실제 프로그램에서이 값을 사용하는 것입니다.

예를 들어 변수 1의 값을 읽고 변수 x에 넣으면 프로그램에서 다음을 정의 할 수 있습니다 int y = 7 * x;

파일을 읽는 방법을 알고 있지만 변수의 특정 값을 읽는 방법을 모르겠습니다.

기본적으로 프로그램은 파일을 읽고 변수 이름을 인식하고 값을 가져온 다음 사용해야합니다.

많은 감사

+3

무엇이 문제입니까? 아직 코드가 있습니까? 왜 실패 하는가? –

+1

더 자세히 알려면 coz 파일에 변수를 쓰는 것이 두 줄로하기 쉽습니다! – Sudantha

+0

'.txt' 파일에 대한 제약이 있습니까? 아니면 형식을 자유롭게 변경할 수 있습니까? – ereOn

답변

1

나는 그것이 변수는 숫자, 배열 또는 문자열로 다른 유형을 가질 수있는 질문에 암시 생각합니다. 또한

struct Var 
{ 
    enum { Double, String, Array } Type; 
    Type type_; 

    double double_; 
    std::string string_; 
    std::vector<double> array_; 

    Var(Type t) : type_(t), double_(0) { } // empty double/string/array 
    Var(double d) : type_(Double), double_(d) { } 
    Var(const std::string& s) : type_(String), string_(s) { } 
    ... 
}; 

, 당신은 C++의 붙박이 다형성 사용할 수 있으며, 각각의 실제에 대한 기본 클래스와 파생 클래스가 :이 경우에는 사용 boost::any<> 또는 boost::variant<>을 말하거나 자신의 변수 유형 람을 만들지 여부를 결정해야합니다 세계 데이터 유형. 항상 텍스트 표현을 저장하고 모든 것을 std::string에 저장하는 것으로 충분할 수도 있습니다. 그러나 당신은 그것을합니다, 당신이 "Type"이라는 타입의 값을 저장한다고 가정 해 봅시다.

변수의 이름은 콜론의 왼쪽에 지정해야합니다. 해당 변수가 프로그램에서 하드 코딩되어 있음을 알고 있으면 기존 변수를 오른쪽 값으로 설정할 수 있습니다. 그렇지 않으면 식별자 이름과 연결된 변수를 동적으로 만들어야합니다. 식별자를 사용하여 std::map<std::string, Type> 키를 입력하면됩니다. 다음과 같이 채울 수 있습니다.

std::map<std::string, Type> variables; 

variables["age"] = Type(28); 
variables["name"] = Type("Fred"); 

실제 텍스트 파일을 구문 분석 할 때 iostream을 사용할 수 있습니다. 한 번 람에 한 줄을 읽어

std::string line; 
while (getline(cin, line)) 
{ 
    std::string::pos n = line.find(':'); 
    if (pos != std::string::npos) 
    { 
     std::string identifier = line.substr(0, n - 1); 
     Type var; 
     { 
      // try parsing it as a number... 
      std::istringstream iss = line.substr(n + 1); 
      char c; 
      double d; 
      if (iss >> d && !(iss >> c)) 
       var = d; 
     } 

     { 
      // try parsing it as an array... 
      std::istringstream iss = line.substr(n + 1); 
      var.clear(Array); 
      double d; 
      if (iss >> c && c == '[') 
       while (iss >> d) 
        result.array_.push_back(d); 
       if (iss && iss >> c && c == ']' && !(is >> c)) 
        // parsed successfully as an array - use "result" 
     } 
     { 
      // it's a string... 
      var = line.substr(n + 1); 
     } 
당신이에 시작하고 문제가 발생할 구체적인 도움을 요청하려고한다

.

참고 : Ruby, python 또는 perl과 같은 언어로이 요구 사항을 충족하는 작동하는 (느리지 만) 프로그램을 쉽게 얻을 수 있습니다.

+0

도움을 주셔서 감사합니다. – Makoo

2

프로그램에 사용할 정보를 저장하는 구성 관련 파일이 필요합니다. 구성 파일 관리 (읽기, 검색, 저장, 저장)에는 많은 구현이 있습니다.나는 작고 편리한 것에 충실한다. libconfig : http://www.hyperrealm.com/libconfig/ 정수, 부동 소수점 및 부울 변수, 배열, 목록 및 닫힌 섹션도 지원한다.

+0

그게 바로 제가 원하는 것입니다. 덕분에. 나는 이것에 관해서 일할 것이고, 나는 다시 돌아올 것이다. – Makoo

관련 문제