2011-08-04 12 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

はい、あなたの権利はありますが、私はそれを修正したときに同じことをします。値を1つずつ変更し、最後の値を格納して再リストします。誰もが私は結果がさらに混乱しているので、私はこれのための良い参照資料を見つけることができます知っていますか?しかし、助けてくれてありがとう、私の前に学ぶちょうど多くの。 – 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. 
} 

上記のコードは、堅牢ではなく、ファイルからの読み取り、数値以外のセパレータをスキップしての最後の処理の概念を示していますこの線。コードも最適化されています。

関連する問題