1 / 20

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

第 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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第14章 ファイル操作(コマンドプロンプト版)第14章 ファイル操作(コマンドプロンプト版) CSVファイルへの出力 CSVファイルからの入力 CSVファイルへの追加出力 練習問題 Excel による関数グラフ描画 今日のポイント リダイレクトとCSVファイルをうまく使おう

  2. CSVファイルとは • コンマ区切り(Comma Separated Values)形式のテキストファイル • データをコンマ(,)で区切り、改行を用いて2次元的に配列 • コンマを含むデータは二重引用符(")でくくられる 標準出力例 標準入力例 printf("%f, %f, %f\n", a, b, sum); scanf("%lf, %lf, %lf", &a, &b, &sum);

  3. 例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じゃない

  4. 例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 コンマを取ったら?

  5. 例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

  6. 例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

  7. 例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として 作ってある人は、そこからコピーすればよい

  8. 例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でない)間は{}を繰り返す

  9. 例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

  10. 問題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

  11. データの項目名も出力する場合 /* 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; } この行を追加

  12. Excelによる関数グラフ描画 • CSVファイルをダブルクリックして、Excelを起動 • Microsoft Excelブック(*.xls)形式で保存 • プロットしたいデータのセル範囲を選択 • 「グラフウィザード」をクリック • 「散布図」を選択し、「形式(T)」で好みの折れ線グラフを選択 • 「次へ>」を2回クリックし、「タイトルとラベル」タブを表示 • 「X/数値軸(A)」に x、「Y/数値軸(V)」に yを記入 • 「完了」をクリック 忘れない うちに保存 最後に上書き保存

  13. 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 修正前と修正後

  15. 中級者向け Excel で対数グラフを描く • 0より大きいデータ領域のみを選択 • 「グラフウィザード」により「散布図」の折れ線 グラフを描く • X軸またはY軸の数値軸(目盛)を右クリック • 「軸の書式設定(O)...」をクリック • 「目盛」タブを選択 • 下方の「対数目盛を表示する(L)」をチェック • 「 OK 」をクリック • 「グラフオプション(O)…」で目盛線を描く

  16. スキルアップタイム 1 第2回レポートの類題 • 標準入力から x とyを読み込み、プログラム中で z = x3 - 75xを計算し、x, y, z を標準出力するプログラム q14_s.cを作成せよ • data1.csvから入力し、結果を data2.csv に書き込め • 例14.5.1のプログラムを参考にするとよい

  17. スキルアップタイム 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と記入 • 凡例をプロットエリア内の空いている領域に移動 • プロットエリアのサイズを調整 • プロットエリアの背景色をなくす

  18. 第3回レポート(必須)課題: スキルアップタイム 1 および 2 • 提出期限: 2007年1月11日(金) 17:00 • 提出場所: ネットワーク実験室(1)入口の提出箱 • 以下の項目を入れること(表紙は不要) • 学籍番号、氏 名 • "q14_s.c"のソースリスト • 実行結果(data2.csv)とそのグラフ • 感 想 第2回レポートの類題

  19. 前回のスキルアップタイムの解答例~コマンド行引数を用いた自作コマンドの作成~前回のスキルアップタイムの解答例~コマンド行引数を用いた自作コマンドの作成~ • コマンド行で指定した文字の数をカウントする 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; }

  20. 前回のスキルアップタイム(オプション)の解答例前回のスキルアップタイム(オプション)の解答例 /* 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

More Related