2011-08-04 4 views
3

어제 저는 .csv 파일을 읽는 데 도움이되는 작은 스크립트를 만들었습니다. 비록 첫 번째 값을 읽고 저장하는 방법을 찾았지만 어떤 이유로 마지막 값을 대신 저장합니다..csv 파일의 필드 값 읽기?

나는 value1 아래의 첫 번째 값이어야한다고 생각하는 것을 저장하고 올바르게 표시하고 실제로 호출 가능한 변수에 저장되도록 다시 표시합니다.

누구든지이 코드의 문제점을 알고 있습니까? 나는 벡터를 사용해야한다고 생각하지만 내가 인터넷에서 찾은 참조 시트를 읽으면 나는 조금 던져지고있다. 어떤 도움을 주셔서 감사합니다.

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

using namespace std; 

int main() 
{ 

    int loop = 1; 
    string value; 
    string value1; 

    while(loop = 1) 
    { 

     cout << "Welcome! \n" << endl; 

     ifstream myfile; 

     myfile.open ("C:/Documents and Settings/RHatfield/My Documents/C++/Product Catalog Creator/Source/External/Sample.csv"); 

     while (myfile.good()) 

     getline (myfile, value, ','); 
     cout << string (value) << endl; 

     value1 = value; 

     cout << value1; 

     myfile.close(); 

     system("PAUSE"); 

     return 0; 
    } 


} 
+0

다음 질문 중 중복 : http://stackoverflow.com/questions/1120140/csv-parser-in-c –

답변

1

오류는 순수한 코드 형식으로 보입니다.

while (myfile.good()) 

루프 이후에는 {}이 없습니다. 그래서 다음 줄만 반복됩니다.

다음 코드는 전체 파일을 읽은 후에 실행됩니다.

cout << string (value) << endl; 

따라서 value은 파일의 마지막 줄을 저장합니다.

+0

맞아요,하지만 고칠 때도 똑같은 일을합니다. 하나씩 값을 입력 한 다음 마지막 값을 저장하고 다시 값을 나열하십시오. 누구든지 결과에 대해 더 혼란스러워하기 때문에 이것을 위해 좋은 참고 자료를 어디에서 찾을 수 있는지 알고 있습니다. 그래도 도움을 주셔서 감사합니다. – Rob

+0

@Rob, 지금 그것은 순수 알고리즘 문제입니다. 많은 솔루션이 있습니다. 첫 번째 줄만 가져 오려면 루프가 필요하지 않습니다. 'while'을'if' 문으로 대체하십시오. –

+0

다시 말하지만, 행 (일부 숫자)과 열 (일부 숫자)에서 데이터를 가져오고, 무엇을 할 수 있는지, 아니면 그냥 행을 읽고 (일부 숫자) 모든 값을 반환한다고 말하지는 않습니다. while 루프를 다시 변경할 수는 없습니다. 벡터가 들어오는 곳인가요? – Rob

0

당신은 당신의 while 루프에서 조건을 변경할 수 있습니다 :

char separator; 
int value1; 
int value2; 
int value3; 
while (myfile >> value1) 
{ 
    // Skip the separator, e.g. comma (',') 
    myfile >> separator; 

    // Read in next value. 
    myfile >> value2; 

    // Skip the separator, e.g. comma (',') 
    myfile >> separator; 

    // Read in next value. 
    myfile >> value3; 

    // Ignore the newline, as it is still in the buffer. 
    myfile.ignore(10000, '\n'); 

    // Process or store values. 
} 

위의 코드 조각은 강력하지 않지만, 파일에서 읽는 숫자가 아닌 분리를 건너 뛰고의 끝을 처리하는 개념을 보여줍니다 선. 코드도 최적화되어 있습니다.

관련 문제