나는 틀림없이 문자열 함수 ++은 C에 익숙하지 않다, 그러나 여기 내 시도입니다 :
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
std::ifstream fin("Info.txt");
if(!fin)
{
std::cout << "Error opening the file" << std::endl;
return(1);
}
char* line_cstr = new char[1000];
char name[1000];
int age;
char color[1000];
char* rest = new char[1000];
fin.getline(line_cstr, 1000);
while (strlen(line_cstr) != 0) {
int numTokensRead = sscanf(line_cstr, "%s %d %s %1000[0-9a-zA-Z ]s", name, &age, color, rest);
if (numTokensRead >= 3 ) {
std::cout <<"name: " << name <<", age: " << age <<", color: " << color <<"\n";
strcpy(line_cstr, rest);
}
// do some error checking for incomplete entries
else if (numTokensRead == 1) {
if (strlen(name) == strlen(line_cstr)) {
// we're done!
return 0;
}
// skip the first token
sscanf(line_cstr, "%*s %1000[0-9a-zA-Z ]s", line_cstr);
}
else if (numTokensRead == 2) {
// skip the first 2 tokens
sscanf(line_cstr, "%*s %*d %1000[0-9a-zA-Z ]s", line_cstr);
}
}
}
다음 텍스트 파일에 작용 :
Info.txt
Mike 25 Red Dave Gabe 8 Green 10 Green
출력
$ ./a.out
name: Mike, age: 25, color: Red
name: Gabe, age: 8, color: Green
나는 모든 가능한 오류 케이스를 처리 할 수 있는지 100 % 확신하지 못했습니다. 두 개의 int, 한 행, 여러 행 등 -하지만 시작해야합니다.
생성자에서 파일 이름을 전달하면 파일을 열 필요가 없습니다. 텍스트 파일의 형식이 한 줄에 모두 올바르게 지정되어 있지 않으면 CSV와 같은 구분 기호를 사용하거나 시간이 오래 걸릴 수 있습니다. – user657267
모든 파일을 읽고 std :: string에 저장 한 다음 해당 문자열에서 원하는 것을 찾으십시오. – nbro
아마도 bash 명령을 실행하는 시스템 호출을 호출 할 수 있습니다. 'cut'명령을 사용하여 각 변수를 새 tmp 파일의 별도 행에 넣으십시오. C++에서 tmp 파일을 읽고 getline()을 사용하여 각 행을 새로운 변수에 넣습니다. – Kam