第
This presentation is the property of its rightful owner.
Sponsored Links
1 / 20

第 14 章 ファイル操作 ( コマンドプロンプト版 ) PowerPoint PPT Presentation


  • 57 Views
  • Uploaded on
  • Presentation posted in: General

第 14 章 ファイル操作 ( コマンドプロンプト版 ). CSV ファイルへの出力 CSV ファイルからの入力 CSV ファイルへの追加出力 練習問題 Excel による関数グラフ描画. 今日のポイント. リダイレクトと CSV ファイルをうまく使おう. CSV ファイルとは. コンマ区切り ( Comma Separated Values ) 形式 のテキストファイル データを コンマ ( , ) で区切り、改行を用いて 2 次元的に配列 コンマを含むデータは 二重引用符 ( " ) でくくられる. 標準出力例 標準入力例.

Download Presentation

第 14 章 ファイル操作 ( コマンドプロンプト版 )

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


14

第14章 ファイル操作(コマンドプロンプト版)

CSVファイルへの出力

CSVファイルからの入力

CSVファイルへの追加出力

練習問題

Excel による関数グラフ描画

今日のポイント

リダイレクトとCSVファイルをうまく使おう


14

CSVファイルとは

  • コンマ区切り(Comma Separated Values)形式のテキストファイル

  • データをコンマ(,)で区切り、改行を用いて2次元的に配列

  • コンマを含むデータは二重引用符(")でくくられる

標準出力例

標準入力例

printf("%f, %f, %f\n", a, b, sum);

scanf("%lf, %lf, %lf", &a, &b, &sum);


14 1 1 csv

例14.1.1 CSVファイルへの出力

/* ex14_1_1.c */

#include <stdio.h>

int main(void)

{

double a, b, sum;

a = 2.345;

b = 5.678;

sum = a + b;

printf("%f, %f, %f\n", a, b, sum);

return 0;

}

Z:\nyumon2>cl ex14_1_1.c

Z:\nyumon2>ex14_1_1>foo.csv

notepad で作成

devenv で編集

コンマがなければCSVじゃない


14 2 1 csv

例14.2.1 CSVファイルからの入力

/* ex14_2_1.c */

#include <stdio.h>

int main(void)

{

double a, b, sum;

scanf("%lf, %lf, %lf", &a, &b, &sum);

printf("a=%f, b=%f, sum=%f\n", a, b, sum);

return 0;

}

Z:\nyumon2>cl ex14_2_1.c

Z:\nyumon2>ex14_2_1< foo.csv

コンマを取ったら?


14 2 2 csv

例14.2.2 CSVファイルからの入力

/* ex14_2_2.c */

#include <stdio.h>

int main(void)

{

double a, b, sum; char s[135];

fgets(s, 128, stdin);

sscanf(s, "%lf, %lf, %lf", &a, &b, &sum);

printf("a=%f, b=%f, sum=%f\n", a, b, sum);

return 0;

}

Z:\nyumon2>cl ex14_2_2.c

Z:\nyumon2>ex14_2_2<foo.csv

コンマを

取ったら?

fgets:一行入力、sscanf: 文字列sからscanf


14 3 1 csv

例14.3.1 CSVファイルへの追加出力

/* ex14_3_1.c */

#include <stdio.h>

int main(void)

{

double a, b, sum;

a = 1.234; b = 2.567;

sum = a + b;

printf("%f, %f, %f\n", a, b, sum);

return 0;

}

Z:\nyumon2>cl ex14_3_1.c

Z:\nyumon2>ex14_3_1>>foo.csv


14 4 3 14 5 1

例14.4.3, 例14.5.1のための準備

  • boo.csvファイルの作成

    Z:\nyumon2>notepad boo.csv

1.000000, 2.000000

3.000000, 4.000000

5.000000, 6.000000

以前の第14章の学習時に Z:\nyumon1内に foo.txtとして

作ってある人は、そこからコピーすればよい


14 4 3

例14.4.3 標準ファイル入出力

/* ex14_4_3.c stdin version */

#include <stdio.h>

int main(void)

{

doublex, y;

int i = 0;

char s[135];

while (fgets(s, 128, stdin) != NULL) {

sscanf(s, "%lf, %lf", &x, &y);

printf("%f, %f\n", x, y);

i++;

}

printf("ファイル中のデータ (x, y) の数は %d 組です.\n", i);

return 0;

}

Z:\nyumon2>cl ex14_4_3.c

Z:\nyumon2>ex14_4_3<boo.csv

読んですぐ使い捨てるので配列は不要

fgets関数の値が NULLでない(入力が Ctrl-zでない)間は{}を繰り返す


14 5 1

例14.5.1 標準ファイル入出力

/* ex14_5_1.cstdin version */

#include <stdio.h>

int main(void)

{

double a, b, sum;

char s[135];

while (fgets(s, 128, stdin) != NULL) {

sscanf(s, "%lf, %lf", &a, &b);

sum = a + b;

printf("%f, %f, %f\n", a, b, sum);

}

return 0;

}

Z:\nyumon2>cl ex14_5_1.c

Z:\nyumon2>ex14_5_1<foo.csv>bar.csv


14

問題14.1 関数値を出力するプログラム

教科書p.139

/* q14_1_1.c */

#include <stdio.h>

int main(void)

{

int i; double x, y;

for (i = -10; i <= 10; i++) {

x = i;

y = 2*x*x + 3;

printf("%f, %f\n", x, y);

}

return 0;

}

Z:\nyumon2>cl q14_1_1.c

Z:\nyumon2>q14_1_1>data1.csv


14

データの項目名も出力する場合

/* q14_1_2.c */

#include <stdio.h>

int main(void)

{

int i; double x, y;

printf("x, y\n");

for (i = -10; i <= 10; i++) {

x = i;

y = 2*x*x + 3;

printf("%f, %f\n", x, y);

}

return 0;

}

この行を追加


Excel

Excelによる関数グラフ描画

  • CSVファイルをダブルクリックして、Excelを起動

  • Microsoft Excelブック(*.xls)形式で保存

  • プロットしたいデータのセル範囲を選択

  • 「グラフウィザード」をクリック

  • 「散布図」を選択し、「形式(T)」で好みの折れ線グラフを選択

  • 「次へ>」を2回クリックし、「タイトルとラベル」タブを表示

  • 「X/数値軸(A)」に x、「Y/数値軸(V)」に yを記入

  • 「完了」をクリック

忘れない

うちに保存

最後に上書き保存


Excel1

Excelにおけるグラフの修正

  • 必ずグラフエリアを選択した状態で行う

  • 「グラフ(C)」メニューの「グラフオプション(C)...」に よる変更

    • 「目盛線」タブでY軸の目盛線の削除、など

  • 「グラフ(C)」メニューの「元のデータ(S)...」による 変更

    • 「系列」タブで各系列に名前を設定、など

  • 右クリックでの「~書式設定(O)…」による変更

    • 「軸の書式設定(O)...」の「目盛」タブで範囲の変更、など


14

250

200

150

y

y

1

系列

100

250

y = 2 x^2 + 3

50

200

0

-20

-10

0

10

20

150

x

100

50

0

x

-10

-5

0

5

10

修正前と修正後


Excel2

中級者向け

Excel で対数グラフを描く

  • 0より大きいデータ領域のみを選択

  • 「グラフウィザード」により「散布図」の折れ線 グラフを描く

  • X軸またはY軸の数値軸(目盛)を右クリック

  • 「軸の書式設定(O)...」をクリック

  • 「目盛」タブを選択

  • 下方の「対数目盛を表示する(L)」をチェック

  • 「 OK 」をクリック

  • 「グラフオプション(O)…」で目盛線を描く


14

スキルアップタイム 1

第2回レポートの類題

  • 標準入力から x とyを読み込み、プログラム中で z = x3 - 75xを計算し、x, y, z を標準出力するプログラム q14_s.cを作成せよ

  • data1.csvから入力し、結果を data2.csv に書き込め

  • 例14.5.1のプログラムを参考にするとよい


14

スキルアップタイム 2

  • data2.csvをExcelで読み込み、data2.xlsに保存

  • Xラベルを x、Yラベルを y, z としてグラフを描画

  • X軸の範囲を -10 ~ 10、Y軸の範囲を -300 ~ 300に変更

  • Y軸の目盛線を削除

  • 凡例の系列1に y = 2x^2 + 3、系列2に z = x^3 -75xと記入

  • 凡例をプロットエリア内の空いている領域に移動

  • プロットエリアのサイズを調整

  • プロットエリアの背景色をなくす


3 1 2

第3回レポート(必須)課題: スキルアップタイム 1 および 2

  • 提出期限: 2007年1月11日(金) 17:00

  • 提出場所: ネットワーク実験室(1)入口の提出箱

  • 以下の項目を入れること(表紙は不要)

    • 学籍番号、氏 名

    • "q14_s.c"のソースリスト

    • 実行結果(data2.csv)とそのグラフ

    • 感 想

第2回レポートの類題


14

前回のスキルアップタイムの解答例~コマンド行引数を用いた自作コマンドの作成~

  • コマンド行で指定した文字の数をカウントする chc.cを完成させよう

/* chc.c: char counter */

#include <stdio.h>

int main(intargc, char*argv[])

{

int c, cnt=0;

while ((c=fgetc(stdin)) != EOF) {

if (c == *argv[1]) cnt++;

}

printf("%c: %d\n", *argv[1], cnt);

return 0;

}


14

前回のスキルアップタイム(オプション)の解答例

/* excel exec program */

#include <stdlib.h>

#include <string.h>

int main(int argc, char *argv[])

{

char cmd[128]="\"C:\\Program Files\\"

"Microsoft Office\\Office11\\Excel.exe\" ";

if (argc > 1) strcat(cmd, argv[1]);

system(cmd);

return 0;

}

excel3.c

Z:\nyumon2>cl excel3.c

Z:\nyumon2>excel3 foo.csv


  • Login