【C言語/C++】ファイルをCSV形式でfprintfを使って保存・書き込みする

公開日: : 最終更新日:2014/08/14 C/C++

スポンサーリンク

数値計算などをC言語でプログラミングするとき、その演算結果をファイルとして保存する必要性がでてくることがあると思います。そして、多くの場合エクセルなどの表計算ソフトでグラフ化できるような形が望ましいものと思います。

非常に基本的なことですが、その一連のプログラムのサンプルを作成しました。まずは、なんらかの配列を作成してそこに計算結果を代入していき、それらを指定のファイルに保存するというものです。

ちなみに、この例文中ではmallocが使用されていますが、これは動的配列といってプログラム中で任意の配列数で作成できる配列となっています。詳しくはこちら

#include<stdio.h>
#include<stdlib.h> /*mallocやrand,srandを使うのに必要*/
/*構造体宣言*/
typedef struct{
	double x,y,z;
}Vector;
int main(void){
	/*C言語の場合冒頭で宣言する*/
	FILE *fp ;
	int i;
	int size = 5;
	Vector *ary = (Vector*)malloc(sizeof(Vector)*size);
	/*seedを変更する*/
	srand((unsigned)time(NULL));
	for(i=0;i<size;i++){
		/*
		0~10のランダムな値を入れる。
		実際は何らかの計算処理で結果が入るのを想定。
		*/
		Vector vec;
		vec.x = ((double)rand()/RAND_MAX)*10;
		vec.y = ((double)rand()/RAND_MAX)*10;
		vec.z = ((double)rand()/RAND_MAX)*10;
		ary[i] = vec;
	}
	/*ファイル(save.csv)に書き込む*/
	if((fp=fopen("save.csv","w"))!=NULL){
		for(i=0;i<size;i++){
			/*カンマで区切ることでCSVファイルとする*/
			fprintf(fp,"%f,%f,%f\n",ary[i].x,ary[i].y,ary[i].z);
		}
		/*忘れずに閉じる*/
		fclose(fp);
	}
	return 0;
};
save.csvファイル
0.726341,4.581439,1.284524
8.125553,6.492508,0.498367
8.830226,4.775231,3.156529
7.246925,8.616596,4.558245
8.665120,9.293802,7.326579

はじめにFILEを開いてしまって、計算途中で逐次的にファイルへ書き込みをしていってもいいのではないかと感じるかもしれないですが、計算は計算部分、保存は保存部分と分けてしまった方が、後で関数化するのも容易になりますし、凝縮度も低くなってるはずなのでこちらの方がいいのではないかと私は思います。

スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

PAK23_husentomemo20140313500-thumb-500xauto-4376

【C言語】printfのような関数を作る

C言語でよくつかわれるprintfでは例えば int a,b,c; … printf(

記事を読む

PAK86_codeing20140517500-thumb-500xauto-4601

【C言語/C++】余りを求める剰余演算子(%)を使う

基本的なことかもしれませんが、C言語やC++などであまりを出すには剰余演算子である『%』を使います。

記事を読む

PAK86_codeing20140517500-thumb-500xauto-4601

【C++/CLI】フォームアプリケーションでコンソール画面を出現させる

プロジェクトのプロパティを開いて「構成プロパティ」→「リンカ」→「システム」の「サブシステム」を「コ

記事を読む

blog-372771_640

【C言語】文字列に指定の文字列が含まれるか調べる

ある文字列に指定の文字列が含まれるかどうかを調べるにはstring.hにあるstrstr関数を使いま

記事を読む

darts-102919_640

【C++】多次元ベクトルクラスを作る

3次元ベクトルクラスや2次元ベクトルクラスを作るときは内部のデータとして静的な配列を使えば問題ありま

記事を読む

eigen_homepage_img

【C++】行列演算ライブラリEigen

デフォルトのCやC++には行列やベクトルなどの演算ライブラリはありません。なので行列計算などをしよう

記事を読む

question

【C言語/C++】はてなの演算子の三項演算子について

C言語などのサンプルにたまに出てくるはてな(?)の演算子は 『?』と『:』の2つで1つの演算子であ

記事を読む

フォルダ画像

【C言語/C++】フォルダ作成を行う

C言語、C++でフォルダを作成するには『direct.h』にある『_mkdir』関数を使うことで実現

記事を読む

0f2890d83857f2d3e50d317c4ef807c2_s

【C言語】fscanfでファイルを1行ずつ読み込む

C言語のfscanfでCSV形式(単純なカンマ区切り)のファイルを読み込むサンプル。 基本的なこと

記事を読む

no image

【C++】既に main.obj で定義されています

error LNK2005: 既に main.obj で定義されています。 fatal error

記事を読む

encodingtype
【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようと

_rtm0919_tp_v
スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

rssimage
【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

rssimage
フィード抽出ツール(RSS1.0、RSS2.0、atom)

任意URL サイト名 サイトURL RSS1.0

computer_server
格安プラン限定レンタルサーバー機能比較表(2016年)

はじめに  最近新しい共用サーバーをレンタルしようと思い調査およびそ

school_toshokan_hondana
kindle unlimitedが便利だったのでお勧めの使い方など感想メモ

 kindle unlimitedというサービスが8/3からAmazo

TAKEBE055122558_TP_V
寝る前にスマホを見ると斜視になる可能性とその対策

はじめに  寝る前などスマホを横になりながら見続けると斜視になる可能

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑