2017-09-17 6 views
2

빈 줄을 건너 뛰고 파일 내의 열 머리글 행을 건너 뛰고 각 레코드를 배열로 저장하려는 데이터베이스 파일 (txt로)을 읽으려고합니다. stop_id를 가져 와서 stop_name을 적절히 찾고 싶습니다. 즉텍스트 파일 읽기 및 여러 배열에 데이터 저장 C++

내가 17 번 쯤 멈추게하면 프로그램에 "Jackson & 콜마"가 표시됩니다. 다음과 같이

파일 형식은 다음과 같습니다

17,17,"Jackson & Kolmar","Jackson & Kolmar, Eastbound, Southeast Corner",41.87685748,-87.73934698,0,,1 
18,18,"Jackson & Kilbourn","Jackson & Kilbourn, Eastbound, Southeast Corner",41.87688572,-87.73761421,0,,1 
19,19,"Jackson & Kostner","Jackson & Kostner, Eastbound, Southeast Corner",41.87691497,-87.73515882,0,,1 

을 지금까지 나는 stop_id 값을 얻을 수 있어요하지만 지금은 중지 이름 값을 얻기 위해 원하는 문자열 조작 C++ 상당히 새로운 오전

mycode.cpp

#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main() 
{ 
    string filename; 
    filename = "test.txt"; 
    string data; 

    ifstream infile(filename.c_str()); 

    while(!infile.eof()) 
    { 
     getline(infile,line); 
     int comma = line.find(","); 
     data = line.substr(0,comma); 
     cout << "Line " << count << " "<< "is "<< data << endl; 
     count++; 
    } 
    infile.close(); 
    string sent = "i,am,the,champion"; 
return 0; 

} 
+0

https://stackoverflow.com/a/5605159/8491726 그리고 당신의 getline에게 구분 기호를 제공 할 수 있습니다 - 그래서 쉼표까지 읽 아니라 전체 라인 –

답변

1

당신은 쉼표의 세 번째 발생을 검색 string::find 3 번 사용할 수 있으며, 다음, line에있는 마지막 두 사건의 위치를 ​​저장 string::substr와 입력 데이터로 사용하고 검색 텍스트를 얻을해야합니다

std::string line ("17,17,\"Jackson & Kolmar\",\"Jackson & Kolmar, Eastbound, Southeast Corner\",41.87685748,-87.73934698,0,,1"); 
std::size_t found=0, foundBack; 
int i; 
for(i=0;i<3 && found!=std::string::npos;i++){ 
    foundBack = found; 
    found=line.find(",",found+1); 
} 

std::cout << line.substr(foundBack+1,found-foundBack-1) << std::endl; 
0

당신은 문자열 intoa 파일의 전체 라인을 읽은 다음 시간까지 때까지 exluding 쉼표 당신에게 각 조각 하나를 제공하기 위해 이제 stringstream를 사용할 수 있습니다. 그런 다음 배열을 채울 수 있습니다. 나는 당신이 그것의 각 줄을 자신의 배열로 원하고 무제한 배열을 원한다고 가정하고있다. 이를 수행하는 가장 좋은 방법은 배열 배열을 만드는 것입니다. 그 라인에있는 모든 데이터의 문자열을 conatining 각각의 벡터의 전체 당신이 벡터를해야합니다

std::string Line; 
std::array<std::array<string>> Data; 
while (std::getline(infile, Line)) 
{ 
    std::stringstream ss; 
    ss << Line; 
    Data.push_back(std::vector<std::string>); 
    std::string Temp; 
    while (std::getline(ss, Temp, ',')) 
    { 
     Data[Data.size() - 1].push_back(Temp); 
    } 
} 

이 방법. 문자열을 숫자로 액세스하려면 문자열을 정수로 변환하는 std::stoi(std::string)을 사용할 수 있습니다.

+0

벡터를 사용하지 않는 방법은 내가 ... 거기 간단히 문자열의 "Jackson & Kolmar"(stop_id) 부분을 가져 와서 배열에 저장하고 싶습니다. – koala421

+0

getline 메소드를 사용하여 처음 두 부분을 건너 뛰고 남아있는 내용을 수집합니다 당신의 벡터. 죄송합니다 귀하의 질문 오해 :) –