2013-10-12 2 views
0

그래서 저는 사용자 파일 생성을 작성하고 있습니다.하지만 지금까지 가지고 있지만 텍스트의 특정 줄을 얻고 그 변수를 프로그램.C++ 어떻게 특정 줄의 텍스트 파일을 얻을 수 있습니까?

int Player::CheckAccount() 
{ 
    Network net; 

    bool fileFound = false; 
    string user = GetLoginUser(); 
    string openDir = "./Characters/" + user + "/" + user + ".ini"; 

    if (fileFound == false) { 
     ifstream openFile(openDir); 
     if (openFile.good()) { 
      util::Logger::Dbg("File found for user " + user); 
      openFile.open(openDir); 
      util::Logger::Dbg("User file " + user + " is ready to be checked"); 
      fileFound = true; 
     } else { 
      util::Logger::Dbg("Could not find user file for " + user + " creating new character file"); 
      CreateAccount(GetLoginUser()); 
     } 
    } 
    return net.GetFinalSize() == 1; 
} 

void Player::CreateAccount(string user) 
{ 
    string dir = "./Characters/" + user; 

    if(CreateDirectory(dir.c_str(), NULL)) { 
     util::Logger::Dbg("Created new user directory for " + user); 
    } else { 
     util::Logger::Dbg("Could not create new user directory for " + user); 
    } 

    string fileName = user + ".ini"; 

    ofstream createUser; 

    string charDir = "./Characters/" + user + "/" + fileName; 

    createUser.open(charDir); 

    SetPlayerBanned(false); 
    SetInAppUsername(user); 

    createUser << "Username = " << GetLoginUser() << endl; 
    createUser << "Password = " << GetLoginPass() << endl; 
    createUser << "app Username = " << GetInAppUsername() << endl; 
    createUser << "Status = " << GetStatus() << endl; 
    createUser << "Bio = " << GetBio() << endl; 
    createUser << "Banned status = " << IsPlayerBanned() << endl; 
    createUser << "Avatar dir = " << GetAvatarDir() << endl; 

    createUser.close(); 
} 

그래서 checkaccount 함수에서 나는 bool banstatus가 될 텍스트 문서에서 변수를 추출 할 수 있기를 원합니다. 내가 싫어하는 것은 외부 lib를 사용해야한다는 것이지만 나는 창에서 바로 그것을 할 수 있기를 원한다.

+0

. 그것은 그러한 문자열을 포함하는 줄이 될 것인가? 일반적으로 특정 행을 얻는 유일한 방법은 원하는 행을 찾을 때까지 파일의 처음부터 행을 읽는 것입니다. – john

+0

그래서 텍스트 파일을 반복합니까? 내가 6 번 라인을 말할 때까지? 또한 내가 원하는 라인에서 그 멍청이 (문자열 bool) Player 금지 = 0 또는 1 –

+0

6 번째 줄을 원한다면 처음 5 개를 읽고 멀리 버리고 6 번째 줄을 읽고 원하는대로하십시오. 해야 할 것. – john

답변

0

이것은 내 구성 파일을 구문 분석하는 방법입니다

당신은 당신이 읽고 싶은 어떤 특정 라인에게 얼마나 말했다하지 않은
int config::Parse(void) 
{ 
    std::ifstream cfile("file.conf"); 

    if(! cfile.is_open()) Util::Error(ErrorNum::NoFileOpen, confile, __func__); 

    str line = ""; 
    std::regex rxlognum("("Blah: ")(.*)"); // "Blah: " is what you want to name the variable 
    std::smatch rxm; 

    while(getline(cfile, line)) 
    { 
     if(std::regex_match(line, rxm, rxlognum)) 
     { 
      TheVariable = rxm[2]; 
      break; 
     } 
    } 

    cfile.close(); 

    return 0; 
} 
+0

위의 '계속'은 본질적으로 아무런 효과가 없습니다. 'Blah :'의 첫 번째 발생 만 원하면 'continue'대신 'break'를 원할 것입니다. – scott

+0

이 주셔서 감사합니다 나는 내 코드에 추가하려고합니다 :) –

관련 문제