質問するログイン新規登録
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

7415閲覧

C++でファイルをcsv出力することについて

the_hoots_under

総合スコア33

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/05/03 13:20

0

0

C++で2次元配列をcsv出力したいのですが、ファイル名を"A.csv"とするだけではダメなのでしょうか

C++

1std::ofstream data_file("A.csv"); 2 3 for (int i = 0; i <size_x ; i++) { 4 for (int j = 0; j < size_y; j++) { 5 data_file << u[i][j] << ","; 6 } 7 data_file<< std::endl; 8 } 9 10 data_file.close();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2019/05/03 13:26

結果どうなったんです?
the_hoots_under

2019/05/03 13:51

私の勘違いでした。(というより私がcsvが何なのか理解していない、、) 結果は、普通に出るのですが、拡張子がcsvなだけでテキストデータと何ら変わらないので。。。 私としては、doble型のデータを精度よく保存したかったのですが。 csvにしても精度が変わる訳ではないのですね。。(いまいちcsvとtxtの違いがわかりません) 質問が変わりますが double型の配列を精度よくファイルに保存するにはどうすれば良いのでしょうか。 お教えいただけますと幸いです。
episteme

2019/05/03 14:06 編集

"精度よく"ってどゆこと? 書いたときとまったく同じ値を読みだしたいなら、バイナリで書いて読めばいいよ。
the_hoots_under

2019/05/03 14:14

なるほど。 バイナリファイルとcsvファイルを勘違いしておりました。ありがとうございます。 バイナリファイル全然わからないので勉強します
episteme

2019/05/03 14:52

CSVはcomma-separated valuesの略。 ただの"カンマで区切った値"ってゆー「書式につけられた名前」でしかありません。
guest

回答3

0

ベストアンサー

バイナリで書いて読むサンプル

C++

1#include <iostream> 2#include <fstream> 3#include <random> 4#include <vector> 5 6int main() { 7 using namespace std; 8 const int N = 10; 9 vector<double> from; 10 vector<double> to; 11 12 random_device gen; 13 uniform_real_distribution<double> dist; 14 15 for ( int i = 0; i < N; ++i ) { 16 from.push_back(dist(gen)); 17 } 18 19 { // 書いて 20 std::fstream data_file("A.bin", ios_base::out | ios_base::binary); 21 data_file.seekp(0); 22 for ( int i = 0; i < N; ++i ) { 23 double val = from[i]; 24 data_file.write(reinterpret_cast<char*>(&val), sizeof(val)); 25 } 26 } 27 28 { // 読む 29 std::fstream data_file("A.bin", ios_base::in | ios_base::binary); 30 data_file.seekg(0); 31 for ( int i = 0; i < N; ++i ) { 32 double val; 33 data_file.read(reinterpret_cast<char*>(&val), sizeof(val)); 34 to.push_back(val); 35 } 36 } 37 38 for ( int i = 0; i < N; ++i ) { 39 cout << from[i] << '\t' << to[i]; 40 cout << ( from[i] == to[i] ? " ok" : " ??" ) << endl; 41 } 42 43} 44 45/* 実行結果 460.858259 0.858259 ok 470.423255 0.423255 ok 480.538775 0.538775 ok 490.0371004 0.0371004 ok 500.132529 0.132529 ok 510.530008 0.530008 ok 520.677164 0.677164 ok 530.314561 0.314561 ok 540.29701 0.29701 ok 550.027607 0.027607 ok 56*/

投稿2019/05/03 14:40

編集2019/05/03 14:42
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

the_hoots_under

2019/05/03 17:41

丁寧にありがとうございます!! めちゃくちゃ参考になりました。 おかげさまで、計算プログラムのファイル入出力の書き換えが解決しました。
guest

0

拡張子がcsvなだけでテキストデータと何ら変わらないので。。。

CSVファイルはテキストファイルです。カンマでテキストデータが区切られたテキストファイルです。
拡張子はファイル形式と無関係です。
プログラムによっては(例えばExcel)は、拡張子CSVを気にしますが、自分で書いたプログラムの場合は、拡張子は単なる覚え書きです。

投稿2019/05/03 14:51

otn

総合スコア86411

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++

1// foo.cpp 2#include <fstream> 3 4int main() { 5 const int size_x = 4; 6 const int size_y = 5; 7 int u[size_x][size_y]; 8 for (int i = 0; i <size_x ; i++) { 9 for (int j = 0; j < size_y; j++) { 10 u[i][j] = i*10+j; 11 } 12 } 13 14 15 std::ofstream data_file("A.csv"); 16 for (int i = 0; i <size_x ; i++) { 17 for (int j = 0; j < size_y; j++) { 18 data_file << u[i][j] << ","; 19 } 20 data_file<< std::endl; 21 } 22 data_file.close(); 23}

実行結果:

D:\work>cl -EHsc foo.cpp Microsoft(R) C/C++ Optimizing Compiler Version 19.20.27508.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. foo.cpp Microsoft (R) Incremental Linker Version 14.20.27508.1 Copyright (C) Microsoft Corporation. All rights reserved. /out:foo.exe foo.obj D:\work>foo D:\work>type A.csv 0,1,2,3,4, 10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34,

...何の問題もありませんなぁ。

投稿2019/05/03 13:34

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問