• ベストアンサー

c言語でファイルを読み書き→別のファイルを読み書き

最近、c言語の勉強をし始めました。 今日、ファイルの読み書きを勉強していて、ふと思ったのですが、 c言語でファイルを読み書き→別のファイルを読み書きのループってできるのですか。 例えば、list1 を読み込み○○して syuturyoku1 に書き込み、その後、list2を読み込み○○して syuturyoku2 に書き込み・・・のループです。 ファイル名は、1~連続の数字です。こんなことって可能なんでしょうか。 できれば、どんな感じのプログラムになるか書いてくれるとありがたいです。

noname#140852
noname#140852

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

ファイルポインタの使い回しについては既に回答が。 >ファイル名は、1~連続の数字です。こんなことって可能なんでしょうか。 sprintf()などで文字列化してください。 for(No = 1;No < 10;No++) {  sprintf(FineName, "list%d", No);  fp1 = fopen(FineName, "r");   読み込み処理  fclose(fp1);  sprintf(FineName, "syuturyoku%d", No);  fp2 = fopen(FineName, "w");   書き込み処理  fclose(fp2); } みたいな感じで。 たまに… fp1 = fopen("listNo", "r"); と記述して、Noの部分が変数Noの内容に置換されることを期待している人が居ますが… そんな動作はしませんのでご注意を。 # そんな動作したら…ループによく使われる変数であるiが置換されまくって……楽しいことになりそうですな。 # 「このプログラムがファイル読み込めないのは変数名なにがしを使用したからだ!!」みたいな。

noname#140852
質問者

お礼

なるほど。試してみます。

その他の回答 (1)

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

ファイルポインタとかハンドラも一つの変数です。 読んで書く、読んで書く、の繰り返しのようですが すべて読み切ってから書き込みを行うのなら極端な話、一つのファイルポインタを使い回しても何ら問題はありません。 でもまぁ、そんな使い方は間違いの元なので、読み取り専用と書き込み専用に分けるのが良さそうです。 変数と考えれば、ループも何ら不自由は無いし、ファイル名に連番が含まれているのならさらに容易。

noname#140852
質問者

お礼

いまさらですが、回答ありがとうございます

関連するQ&A

  • C言語でこんなことは可能ですか?

    現在あるプログラムを作りたいと思いC言語の勉強をしています。 それに伴い、下記のプログラムはC言語で作成可能でしょうか。 例) Aのフォルダ内にbというファイル(txt)があるとして、 bのファイル内の「ありがとう」という文字を検索し表示させるプログラム は作成可能でしょうか。表記としては --------------------------------- ファイル名 | 検索文字 ---------------------------------  A    | ありがとう  -------------------------------- としたいと思っているのですが・・・ よろしくお願いします。

  • C言語でのファイル読み込み

    C言語でのファイル読み込みに関してお尋ねしたいことがございます。 たとえば、「test1.dat」というような数字が複数行記載されたデータファイルがあり、 それを配列に読み込んで作業をしたのちに、 同じ作業を「test2.dat」「test3.dat」・・・というようなデータファイル (これらも、test1とは異なる数字が複数行記載されたデータファイル)にも 施したい場合、どのようなループ処理をすればよいのでしょうか? perlの場合ですと比較的簡単にできたのですが、 Cの場合はどうしたらいいかわかりません。 どうぞよろしくお願いいたします。

  • C言語 CSVファイルの読み込み

    C言語でCSVファイルから数字を読み込み、それを計算するというプログラムを作りたいのですが、CSVファイルについて全く知識が無く、加えてCSVファイルを利用したプログラムを作るのが初めての為、勝手がわかりません。 まずCSVファイルというのは、 1.2,2.3,3.4 4.5,5.6,6.7 7.8,8.9,9.0 といった数字(文字列)をカンマで区切ったテキストファイルですよね? それをどのようなプログラムで読み込むのでしょうか? 例えば、上記の数字を読み込み、 a. 1.2+4.5+7.8=x b. 8.9-5.6-2.3=y c. 3.4*6.7*9.0=z と計算する場合のプログラムを教えていただきたいです。 よろしくお願いします。

  • [C言語]2つのファイルを用いたプログラムについて

    こんにちは、最近C言語でファイルを扱うプログラムについて学習しているものです。 2つのファイルを用いて合計値と平均値を求めるプログラムについての質問です。 具体的には、以下に示すようなものをC言語で作成しようとしています。 例えば、以下の2つのデータファイルがあるとします。 /*(1)価格表.txt*/ わかめ 195 醤油 300 電球 298 … … … … 納豆 88 (約2000種類) /*(2)買い物リスト.txt*/ 納豆 えび 醤油 … (約500種類) この2つのファイルを用いて、「買い物リスト.txt」に書いてあるすべての商品価格の合計値と、価格の平均値を「価格表.txt」を用いて求めるプログラムをC言語で作成してみたいと考えています。 「価格表.txt」の商品数が少なければ、switch文を用いてプログラムを作成することができると思うのですが、「価格表.txt」の商品数が2000種類くらいある場合だと、どのようにプログラムを作成すればよいかわかりません。 よろしければご教授ください。OSはUbuntuを使っております。 よろしくお願いいたします。

  • 2つのファイルを用いたC言語のプログラムについて

    こんにちは、最近C言語でファイルを扱うプログラムについて学習しているものです。 2つのファイルを用いて合計値と平均値を求めるプログラムについての質問です。 具体的には、以下に示すようなものをC言語で作成しようとしています。 例えば、以下の2つのデータファイルがあるとします。 /*(1)価格表.txt*/ わかめ 195 醤油 300 電球 298 … … … … 納豆 88 (約2000種類) /*(2)買い物リスト.txt*/ 納豆 えび 醤油 … (約500種類) この2つのファイルを用いて、(2)買い物リスト.txtに書いてあるすべての商品価格の合計値と、価格の平均値を「価格表.txt」を用いて求めるプログラムをC言語で作成してみたいと考えています。 「価格表.txt」の商品数が少なければ、switch文を用いてプログラムを作成することができると思うのですが、「価格表.txt」の商品数が2000種類くらいある場合だと、どのようにプログラムを作成すればよいかわかりません。 よろしければご教授ください。OSはUbuntuを使っております。 よろしくお願いいたします。

  • ファイルの読み書きについて

    ファイルの読み書きについて質問です。 テキストファイルの読み書きに使うStreamReader、StreamWriterは 文字コードを指定しないと使えませんが、文字コードを指定せずに 使えるファイル読み書きの方法はないのでしょうか? メールソフトを作っていてその中で異なる文字コードのデータを ファイル上で扱わなければいけない(海外から送られてきたUTF-8の 日本語メール等)事に気付きこの質問をさせて頂きました。 使用言語はC#、.net Framework 2.0 (Visual Studio2005)です。

  • c言語について教えてほしい

    教えてください。 現在c言語を自習していますが、偶然にこういう問題を見ましたが、なかなか解けなくて、助けがほしいです。お願いします。 問題: fopen,fputs,fcloseを使って、次のプログラムを作成しなさい。文字列とファイル名を入力させ、ファイルを生成する。(入力したファイル名に拡張子.txtを付与する。) 表示イメージ: 文字列を入力して下さい。 ファイル書き込みテストをします。注意します (←入力する) ファイル名を入力して下さい。 testei (←入力する) ファイルの書き込みに成功しました。 ファイルイメージ: testi.txt (←入力したファイル名 拡張子.txtが付与される) ファイル書き込みテストをします。注意します (←入力した文字列)

  • C言語でアクセスデータベースのメモ型の読み書きをしたい。

    データベース初心者です。C言語(C++)でアクセスデータベースの読み書きをしていますが、メモ型の読み書き方法が判りません。アドバイスをお願いします。 アクセス方法は、ODBC-APIを使用して <書き込み時> SQLPrepare SQLBindParameter SQLExecute <読み込み時> SQLExecDirect SQLBindCol SQLFetch の手順で行っています。 教えて欲しい内容 1.メモ型の場合、BIND時のフィールド形式指定は、何を使用するのでしょうか? 2.フィールド指定をSQL_C_CHARとして、書き込みを行うと1000文字以上に書き込むこと出来ているようですが、読み込み時に失敗します。アドバイスをお願いします。

  • ファイルの大きさを調べたいのですが、、、(C言語)

    2週間前にC言語の勉強を始めたばかりです。 「あるファイルのサイズを見て、メモリを確保し、  読み出した内容をソートして、同じファイルに再び書き出す」 というプログラムを作ろうとしているのですが、 「ファイルのサイズを調べる」という時点でつまづいてしまっています。。。 適当に英数字を書き連ねたファイル(aaa.txt)を、 (fp = fopen(filename,"a+") という形で開いています。 追加読み書きするので"a+"かな? と思ったのですが、、、   //ファイルの終端に移動し、その位置を取得する   fseek(fp1, 0L, SEEK_END);   position = ftell(fp1);   printf("ファイルポインタの位置は %ld です",position); ファイルの大きさを調べるのに、この方法を試してみたのですが、 位置の値が0になってしまいます。。。 filelength(fileno(fp)); でも試してみましたが、 やっぱりファイルサイズが0と返ってきます。 何が原因なのか、何が悪いのかも判らなくて途方に暮れています。 「ここはこう書くんだよ」と、的確なご回答を戴けると幸いです。 基本的な質問で申し訳ありませんが,宜しくお願い致します。

  • C言語でのファイルの作成について(超初心者です)

    C言語を独学で勉強しています。 のちのち、C++も使えるようにと思い、ソフトも購入し使っています。 本(C言語のみ)などを見てサンプルプログラムを入力して実行はできるのですが、 フォルダとファイルの関係が全くわかりません。 1つサンプルプログラムを作るごとにフォルダを作成して 実行を繰り返しているのですが、 本当にそうしないといけないのでしょうか? 例えば、2つ以上のファイルを使ったプログラムは どうしたらいいのでしょうか? 超初心者なので コンパイルした後にできるファイルの意味も よくわかりません。 うまく説明できないのですが、このあたりのファイルの流れと意味を わかりやすく教えてもらえませんか? また こうした方がいいというものがあれば教えてください。 よろしくお願いします。