• 締切済み

C言語のファイル入出力について教えて下さい

C言語初めて1ヶ月の超初心者です。 本を読んでもネットで調べても、ファイル入出力の意味がいまいちよく分かりません。 プログラムはCPadで書いています。 書き終わったプログラムを.cのファイル名で保存し、それをコンパイル。 読み込みたいファイルを.csvで作る。書いたプログラムの実行ボタンを押し、 .exe .csv .c の3つのファイルを打ち込んだ後、また.cを打ち込む。 これで一応実行はできるのですが、csvファイルで作ったもの (例をだして言うと ------------------------------------------------------------------ 名前     番号      給与   残業代    所得税 ○○  0001     200000   20000     10000 ------------------------------------------------------------------ というものをcsvで作るとします)  は、プログラムでも、名前 番号 給与 残業代 所得税 と書いてある部分はまったく同じように作らないと csvファイルから読むことはできないのでしょうか? csvファイルとプログラムを実行した結果の役割が、理解出来なくて困っています。ずっとプログラムの文法(?)ばかり勉強してきて、いざファイル入出力をしたら、どういう意味があるのかどう役立つのか分かりません。 後、上のような表で20人分をまとめて出力したいのですが、ファイル入出力するにあたって、条件式はfprintfなどを書く前に書くのでしょうか? お勧めの分かりやすい本などの情報も、教えて頂けると嬉しいです。   長々申し訳ありませんが、宿題の納期が近いので困っています。 よろしくお願いします。

みんなの回答

  • unsigned
  • ベストアンサー率13% (5/38)
回答No.4

なるほど。どんな課題なのかがおぼろげに見えてきました。 ※社の新人研修用に自分が考えた課題にソックリです(笑 まず確認しておきたいのですが、ファイルというものが 何なのかはご存知ですよね? CSVファイルというのは、C言語が提供する特殊な機能という 訳ではなく、カンマ区切りでデータを記述しただけの 単なるファイルの事です。 恐らくですが、 excelで作成されてcsv形式で出力されたcsvファイルがあって、 それを読み込んだ上でプログラム中で残業代や所得税などを算出し、 算出した内容を加味して画面に出力する…という感じなのでは? 残業代や所得税の算出方法は、別の関数で提供されているか 方法自体が問題の中で提示されていることと思います。 まずは課題の仕様を理解しない事には、実装もままならないので そのあたりはちゃんと押さえた上で課題に取り組まないと お話にならないと思いますよ。 宿題がんばってください。

shutalui77
質問者

お礼

やっと大体どんな感じなのかが分かり、 この後やらなければいけないことも見えてきました。 やはり変に難しく考えすぎていた様です。 まずはエクセルで作成されたファイルをcsv形式にして実行してみます。 関数や計算式は本を見ながら何とかできるので、ようやく課題に取り組めます。 ありがとうございました。

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

>csvファイルと言うのはプログラムのデータという変数を >入れる箱のようなものなのでしょうか? 日本語が良くわかりませんが。。。 そんなに難しく考える必要は無いと思うのですが、 CSVとは文字がカンマで区切られただけのただのテキスト ファイルです。とりあえず、聞く前に、 名前,番号,給与,残業代,所得税 1人目,0001,200000,20000,10000 2人目,0001,200000,20000,10000 3人目,0001,200000,20000,10000 4人目,0001,200000,20000,10000 ↑これをメモ帳でも何でもいいので開いて、貼り付けて、 「test.csv」というファイル名で保存してエクセルで 開いてみれば、CSVファイルをエクセルがどう扱っているか わかると思いますが。。。 プログラム以外のところで躓いてる気がしますが CSVファイルというのがどんなファイルなのか きちんと理解するのが先決かも。

shutalui77
質問者

お礼

回答ありがとうございます。 どこから何を読み込んでどう出力するかなど、基本的な仕組みの部分が理解できないまま、ただプログラムの書き方を覚えてきていました。 とりあえず、明日「test.csv」を作ってエクセルで開いてみます。

  • unsigned
  • ベストアンサー率13% (5/38)
回答No.2

まずCSVファイルというものがどういったものであるかご存知でしょうか? CSVファイルというのはファイルにデータを格納する際の形式の事で カンマ(,)でデータを区切ったものの事をいいます。 質問にあるデータをCSVの形式で表現すると… ○○,0001,200000,20000,10000 といった感じでしょうか? 恐らくこの形式でファイルに書き出せという事だと思います。 後は文字列処理やファイル入出力関係の標準関数を 駆使すればなんとかなるんじゃないかと。 宿題がんばってください。

shutalui77
質問者

お礼

回答ありがとうございます。 ファイルにデータを格納する際の形式というと、 csvファイルと言うのはプログラムのデータという変数を入れる箱のようなものなのでしょうか? ------------------------------------------------------------------ 名前,番号,給与,残業代,所得税 ○○,0001,200000,20000,10000 ------------------------------------------------------------------ .csvというファイルに、上記のような感じで内容を書けば大丈夫ということでしょうか。 後出しで大変申し訳ないのですが、表はエクセルで管理してあり、 エクセルの内容を.csvのファイルにコピペしています。 そのエクセルで作った内容には手を加えないことと言われています。 エクセルの表の内容は下記のような内容なのですが ------------------------------------------------------------------ 社員番号 名前     番号      給与   労働時間    0001     ○○    0001     200000   9:00-18:00      ------------------------------------------------------------------ プログラム画面で今作っているのは下記のような給与の総合計で ------------------------------------------------------------------ 社員番号 名前 基本給 手当て 通勤費 残業手当 源泉徴収 総支給額 0001   ○○ ------------------------------------------------------------------ エクセルには表示されて無い項目が多数あります。 全て一行ずつfprintf(fp," ");の中に書いています。 .csvファイルの内容には手を加えず、プログラムとcsvの項目名が 多々違っていても大丈夫なのでしょうか。 理解力に欠けていて肝心なところが理解できず苦労しています・・。 何回も質問申し訳ありません。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

> 名前     番号      給与   残業代    所得税 > ○○  0001     200000   20000     10000 これらの内容をcsvファイルで作るということは、 名前,番号,給与,残業代,所得税 ○○,0001,200000,20000,10000 のように、各フィールドをカンマで区切っていますね? csvとはcomma separated valueの略ですから、csvファイルを作っている という以上、カンマで区切っていないと「名が体を表わしていない」 ことになります。

shutalui77
質問者

お礼

回答ありがとうございます。 ------------------------------------------------------------------ 名前,番号,給与,残業代,所得税 ○○,0001,200000,20000,10000 ------------------------------------------------------------------ .csvというファイルに、上記のような感じで内容を書けば大丈夫ということでしょうか。 後出しで大変申し訳ないのですが、表はエクセルで管理してあり、 エクセルの内容を.csvのファイルにコピペしています。 そのエクセルで作った内容には手を加えないことと言われています。 エクセルの表の内容は下記のような内容なのですが ------------------------------------------------------------------ 社員番号 名前     番号      給与   労働時間    0001     ○○    0001     200000   9:00-18:00      ------------------------------------------------------------------ プログラム画面で今作っているのは下記のような給与の総合計で ------------------------------------------------------------------ 社員番号 名前 基本給 手当て 通勤費 残業手当 源泉徴収 総支給額 0001   ○○ ------------------------------------------------------------------ エクセルには表示されて無い項目が多数あります。 全て一行ずつfprintf(fp," ");の中に書いています。 .csvファイルの内容には手を加えず、プログラムとcsvの項目名が 多々違っていても大丈夫なのでしょうか。 何回も質問申し訳ありません。

関連するQ&A