• 締切済み

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% (2126/6286)
回答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

  • C言語 入出力ファイルの読み書きとプリントアウト

    入力データ(番号、名前、年齢、住所)を入力データファイル「in.txt」から読み込み、番号順に並べ替えて、出力データファイル「out.csv」に書き出す&プリントアウトするプログラムを作りたいのですが、プログラムを実行する度にコンパイラからプリントアウトする方法(例えばプリンターをプログラム内で指定)を教えてください。回答お願いします

  • C言語のファイル出力について

    C言語のfprintfによるファイル出力について教えてください。 fprintfで、下記の例のように、上書きする行を指定することはできますでしょうか? 出力ファイルは.csv形式で、モードは問いません。 例:既に、sample.csvというファイルがあり、中身が、 0 0 0 1 1 1 2 2 2 とします。プログラムのfprintfで、3 3 3という出力を2行目に上書きし、 0 0 0 3 3 3 2 2 2 と変更する。 もし上記の方法をご存知でしたら、ご教授いただけましたら幸いです。 よろしくお願いいたします。

  • C言語のファイル入出力について

    for文の中でファイルの入出力をファイル名を変えながら行うことはできますか?作成したいプログラムは以下の通りになっています。 よろしくお願いします。 #include<stdio.h> main() { int i; FILE *fp; for(i=0;i<10;i++) {  fp=fopen("ココにiの値を入れたい.txt","w");  fprintf(fp,"%d\n",i);  fclose(fp); } return(0); }

  • C言語 iMacでのファイル入出力

    #include <stdio.h> int main() { FILE *fp; fp=fopen("test.txt","w"); if (fp==NULL){ perror("ファイル・オープンに失敗しました\n"); return -1; }else printf("ファイルを正常に開きました\n"); fprintf(fp,"これが初めてのファイル入出力です\n"); if (fclose(fp)!=0){ perror("ファイル・クローズに失敗しました\n"); return -1; }else printf("ファイルを正常に閉じました\n"); return 0; } これを実行してもどこにもtest.txtというファイルがありません。 同じプログラムをwinでも実行してみたところ正常にファイルが作られました。 mac初心者なもんで、どうすればいいのでしょうか?

  • c言語:ファイルの入出力

    2つの行列をファイルから読み込み、その積をファイルに出力するプログラムを 作りたいのですが、参考書を読んでもよくわからないので教えて頂きたいです。 テキストファイルの文字列のコピーなどは、参考書を見てできたのですが、 ファイル入出力を使った数値の計算がいまいち理解できませんでした。 注意点は以下の通りです。 ・ファイルはカンマ区切りのテキストファイルとし、入力ファイルはエクセルで作成。拡張子は.csv。 ・ファイル名はキーボードから入力できるようにする。 よろしくお願いします。

  • C++ ファイルの入出力

    C++ ファイルの入出力 テキストファイル(ノートパッド)の入出力について勉強しています。プログラムを一通り書いてデバッグした所、何のエラーもありませんでした。しかしテキストファイルを開くことができません。ファイルが存在しないときのために「I/O error」のメッセージを表示するようにしてあるんですけど、プログラムを動かすとそのメッセージが出ます。自分の書いたプログラムが悪いのかと思い、教科書にある例題をコピーして動かしても同じ結果です。プログラム自体は何の問題ないのにテキストファイルがリンクしません。ちなみにファイルの場所は指定していません。なのでcppファイルがあるところと同じところにテキストファイルを置いています。これで動くはずなんですが動きません。どこにテキストファイルを置けばいいのでしょうか?もし必要なら私が書いたコードも載せます。回答よろしくお願いします。

  • ファイルの入出力で困っています(C言語)

    はじめまして、nathan3と申します。 昔、さらっとC言語を学んでいたので、仕事場でも活用できればと思い、勉強しなおしています。 以下のプログラムですが、コンパイルはするものの、実行がなされません。 sprintfをつかってファイルを作り、fprintfで読み込み、countで繰り返し別名のファイルを読み込み・作成し…といったプログラムを書いているつもりです。 調べながら書いた稚拙なプログラムですが、ここがちがう!というところをお教えいただけると大変助かります。 #include <stdio.h> int main(void){ FILE *fp,*fo; char *fname1; char *fname2; char s[100],t[100]; int ret,count; for(count = 0 ; count < 3 ; count++) { sprintf(fname1, "sankasha%d.txt", count); fp = fopen(fname1, "r"); if (fp == NULL){ printf("%s can't open a file\n", fname1); return -1; } sprintf(fname2, "matome%d.txt", count); fo = fopen(fname2,"w"); if (fo == NULL){ printf("%s can't open a file\n", fname2); return -1; } printf("--fscanf---"); while( (ret = fscanf(fp,"%[^,],%s", s, t)) != EOF ){ fprintf(fo,"%s ", t); } } fclose(fo); fclose(fp); return 0; } 何度見直しても間違いが見つからず困窮しております。 どうぞ、みなさまのお力をお貸しください! よろしくお願いいたします。

  • C++のstringクラスとファイルの入出力について

    C言語では入出力はfopen,fcloseなど, 文字列の扱いも,char型の配列にfgets…なんとなく使いづらかったので, C++のstringクラスが便利だと聞き,勉強しています。 主にネットで"string 配列 入出力"などで検索しながら探しています。 自分で作成したデータファイル"ex.txt"を読み込み, 用意した配列"data[i]"に代入して,その後色々処理をしたいと思います。 //ex.txt A 2 0 1.0 B 1 2 10.0 C 1 0 100.0 という,"名前 番号1 番号2 数値データ"という4つの情報を"data[i]"に入れ,for文でA~Cまで配列を作りたいです。 後に,名前と番号,数値を切り離して処理したいです。 とりあえず某サイトを見よう見まねで以下のプログラムを書きました。 #include <fstream> #include <string> #include <iostream> using namespace std; int main(){ ifstream ifs( "ex.txt" ); string str; ifs >> str; cout << str << endl; return 0; } Visual C++のコンソールアプリケーションでデバッグなしで実行させると 単に,"A"と一文字しか出力されませんでした。 正直,動作もなにもわからず書いただけです。 C++のstringクラスを用いて,先の"ex.txt"の内容を, ファイルから読み込んで,画面に表示させるプログラムを教えてください。 よろしくお願いします。

  • C言語を始めたのですが

    最近C言語を初めています。ソフトとしてCPad for Borland C++compilerを使っています。 初めの一日目はそれで作ったものを実行ボタンで実行できたのですが、 次の日からファイルを開いて実行を押してもそのファイルがある場所(デスクトップなど)が記されているだけて、何もプログラムが実行されません。 なにか押してみても '○○' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と表示されます。何か原因があるのでしょうか?もしも解消できるかたいれば教えてください。また、他に初心者におすすめなソフトを教えてもらえないでしょうか?今使っているのは今現在インストールできないみたいなのですが、他に使いやすいソフトあれば教えてください。 長くなりましたが、よろしくお願いいたします。

  • C言語での実行

    C言語(ボーランドのCpad)を使っています。 いつも使ってるパソコンと違うパソコンでC言語のプログラムをし始めました。 前のパソコンと同じようにプログラムのコードをCファイルで保存して同じように新しいパソコンから開いて同じように実行ボタン押したのですが、実行できず、exeファイルが存在しませんって表示されます。 ちなみに、動かすプログラムは4つあり、そのうちの3つはちゃんと実行でき、ファイルも作成できるのですが、同じ方法でやってるあと1つのプログラムだけがうまくいきません。 4つとも同じフォルダにするようにしていて、3つはちゃんと実行できるので、フォルダが違うことはないと思います。 なぜ「exeファイルが存在しません」ってなるのか。 ちゃんとフォルダにCファイルはあるのに。 ちなみに、正確にできる3つのように、実行できると「OBJファイル」とか「アプリケーション」とかも同時に作成されます。 ただ、問題の1つのプログラムは当然、実行できず、exeファイルが存在しませんって表示されるので何も作成されません。 ボーランドのC言語、実行、ファイル、など詳しい方ぜひ教えて下さい。 同じやり方で今までのパソコンではできていたのに、パソコン変えると実行できなくなります。 フォルダやCファイルが正確ではないのかとも思いましたが、前までのパソコン通りにやっているので問題ないと思います。 ぜひアドバイス下さい。

専門家に質問してみよう