2012-11-03 4 views
2

이봐 모든 그래서 나는 텍스트 파일에서 값을 가져해야하지만 값은 모두이로 작성되어 단독으로하지 않습니다C++의 파일에서 한 줄의 특정 문자를 읽을 수 있습니까?

인구의 크기 :

(30)는 C++로 어떤 방법이 있나요 그 I ':'다음에 읽을 수 있습니까? 내가 좋아 >> 연산자를 사용하여 시도했다 :

string pop; 
inFile >> pop; 

하지만이 숫자와

inFile.getline(pop, 20); 

를 사용하여 어떤 이유로지기 전에 오프 물론 공백이 문을 종료 나에게 오류의 부하를 준다 왜냐하면 그것은 어떤 이유로 든 문자열에 직접 쓰고 싶지 않기 때문입니다. 문자열 배열을 사용하고 싶지 않습니다. 그 이유는 숫자를 테스트하고 그 문자열을 문자열에서 추출하기가 쉽지 않기 때문입니다. 어쨌든 getline 함수를 문자열과 함께 사용할 수 있습니까? ':'문자 다음부터 읽을 수 있습니까?

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstring> 
#include <cstdlib> 

using namespace std; 
int main() 
{ 
    string fname; 
    cin >> fname; 
    ifstream inFile; 
    inFile.open(fname.c_str()); 
    string pop1; 
    getline(inFile,pop1); 
    cout << pop1; 
    return 0; 
} 

ok 여기에 새로운 getline이있는 코드가 있지만, 여전히 아무 것도 출력하지 않습니다. 다음 조작 문자열 올바르게 텍스트 파일을 열고 않으며, 전체 라인을 읽을 수

+0

입력 스트림의 멤버가 아닌'std :: string'에 대한'getline' 버전이 있습니다 :'std :: getline (inFile, pop)'. –

+0

도움을 주셔서 감사합니다,이 진술은 오류가 발생하지 않지만 내가 cout << pop을 사용할 때 아무것도 출력하지 않습니다; –

+0

실패 할 유일한 이유는 1) 잘못된 파일 이름을 입력했기 때문에 파일을 제대로 열지 못했습니다. 2) 파일이 비어있었습니다. 3) 파일의 첫 번째 줄이 비어 있습니다. 오류 검사를 추가하여 파일이 열리도록하십시오. 'std :: getline (inFile, pop1)) {std :: cout << "줄 :"<< pop1 << "\ n";}' –

답변

4

당신은 아마 최고 char 배열에서 작동합니다 - 당신은 아마 더 나은 너무 결장을 찾고 있습니다

std::string line; 
std::getline(inFile, line); 
line = line.substr(19); // Get character 20 onwards... 

를 : -

size_t pos = line.find(":"); 
if (pos != string::npos) 
{ 
    line = line.substr(pos + 1); 
} 

또는 당신은 당신이 int 치의 물건을 읽을 수 있도록 다시 이제 stringstream으로 공급 할 수 있음을 완료하면

비슷한?

int population; 
std::istringstream ss(line); 
ss >> population; 

는 분명히이 모든 양식 줄에

<Key>:<Value> 

하나에 당신이 당신의 데이터를 가정 데이터

+0

감사합니다. 내가 뭘 생각했는지. 따라서 문자열의 경우 inFile.getline (pop, 20) 대신 getline (inFile, line)을 사용합니다; 멋지다. –

+0

그래,이 코드를 사용할 때 오류는 없지만, 만약 내가 cout << line; –

+0

아니요. 스트림 연산자의 전체적인 점은 이와 같은 문자열 조작을 피하는 것입니다.예를 한 번에 한 줄을 읽지 만 데이터를 구문 분석하기 위해 stringstream을 사용하십시오. –

2

수행 할 작업에 따라 달라집니다. 그렇다면이 작업을 수행 할 것입니다 :

std::string line; 
while(std::getline(inFile, line)) 
{ 
    std::stringstream linestream(line); 

    std::string key; 
    int   value; 

    if (std::getline(linestream, key, ':') >> value) 
    { 
     // Got a key/value pair 
    } 
} 
+0

콜론과 값 사이에 공백이있는 것처럼 보이지만 괜찮습니다. –

+0

@SteveJessop : Streams는 콜론 뒤에 여분의 공백을 올바르게 처리합니다. 그래서 문제는 아닙니다. –

+0

"핵심"부분이 부적절하다는 점에 감사드립니다. 숫자가 필요한 것은 GA에 들어가기 때문입니다. 정말로 나를 죽이는 것은이 getline (inFile, line)이 내 문자열 안에 아무 것도 저장하지 않는다는 것입니다. –

관련 문제