[解決済み] c++ .csv ファイルから読み込む
2022-03-10 07:42:11
質問
私は、.csvファイルからの情報をコンソールに出力することになっている次のコードを持っています。
while(file.good())
{
getline(file, ID, ',');
cout << "ID: " << ID << " " ;
getline(file, nome, ',') ;
cout << "User: " << nome << " " ;
getline(file, idade, ',') ;
cout << "Idade: " << idade << " " ;
getline(file, genero, ' ') ;
cout << "Sexo: " << genero<< " " ;
}
そして、こんな感じのcsvファイル(メモ帳で開くと)。
0,Filipe,19,M
1,Maria,20,F
2,Walter,60,M
プログラムを実行すると、コンソールには必ずこのように表示されます。
私の疑問は、なぜプログラムはこれらのcoutメッセージを最初の行だけでなく、すべての行で繰り返さないのかということです。
Nomeは名前、idadeは年齢、genero/sexoは性別を表しますが、この投稿を作成する前に翻訳するのを忘れていました。
解決方法は?
をフォローすることができます。 この回答 C++でCSVを処理する様々な方法を見ることができます。
あなたの場合、最後の呼び出しが
getline
は、実際には最初の行の最後のフィールドを、そして残りの行をすべて、変数
genero
. これは、ファイルの終わりまでスペースデリミタが見つからないためです。スペース文字を改行文字に変えてみてください。
getline(file, genero, file.widen('\n'));
とか、もっと簡潔に言うと
getline(file, genero);
さらに、チェックした
file.good()
は時期尚早です。ファイル中の最後の改行は、次の
getline()
を呼び出すと
ID
. この時点でファイルの終端が検出されるので、それを元にチェックを行う必要があります。この問題を解決するには
while
をベースにしたテストに変更しました。
getline()
を呼び出す。
ID
そのものです(各行がうまく形成されていることが前提です)。
while (getline(file, ID, ',')) {
cout << "ID: " << ID << " " ;
getline(file, nome, ',') ;
cout << "User: " << nome << " " ;
getline(file, idade, ',') ;
cout << "Idade: " << idade << " " ;
getline(file, genero);
cout << "Sexo: " << genero<< " " ;
}
より良いエラーチェックのために、各呼び出しの結果を確認するために
getline()
.
関連
-
[解決済み] テスト
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] PostgreSQLからのPL/pgSQL出力をCSVファイルに保存する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】'cout'は型名ではない
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】C++でCSVファイルを読み、パースするにはどうすればよいですか?