C言語で2つのファイルの内容を3つ目のファイルに結合する方法
この記事では、C言語を使って2つのテキストファイルの内容を読み込み、それらを1つの3つ目のファイルに結合(マージ)するプログラムを紹介します。ファイル操作の基本である fopen、fgetc、fputc、fclose などの標準ライブラリ関数の使い方を学ぶのに最適な例題です。
処理の概要
まず、2つの元ファイル(java.txt と kotlin.txt)にそれぞれ初期内容を書き込みます。その後、両方のファイルを読み込みモードで開き、内容を順番に3つ目のファイル(ttpoint.txt)へ書き出すことで、ファイルを結合します。
入力例
java.txt の初期内容:「Java is a programing language.」 kotlin.txt の初期内容:「kotlin is a programing language.」 ttpoint.txt の初期内容:空(ブランク)
出力例
files are merged ttpoint.txt の最終内容:「Java is a programing language.kotlin is a programing language.」
アルゴリズム
- 文字型配列 a[] を宣言し、「Java is a programing language.」で初期化します。
- FILE 型へのポインタ f1 を宣言し、ファイル「java.txt」を書き込みモードで開きます。
- while ループと
fputc()を使って、配列 a[] の全データを f1 に書き込みます。 - 同様に、配列 b[] を「kotlin is a programing language.」で初期化し、f2 を使って「kotlin.txt」に書き込みます。
- 次に、java.txt を読み込みモードで f1 として、kotlin.txt を読み込みモードで f2 として開きます。
- 結果を保存するため、ttpoint.txt を書き込みモードで f3 として開きます。
- いずれかのファイルポインタが NULL の場合は、エラーメッセージを表示して終了します。
fgetc()で f1 から1文字ずつ読み取り、EOF に達するまでfputc()で f3 に書き込みます。- 同じ処理を f2 に対しても実行します。
- 最後に、結合された ttpoint.txt を読み込みモードで開き直し、内容を画面に表示します。
- すべてのファイルポインタを
fclose()で閉じて終了します。
サンプルコード
#include <stdio.h>
#include <stdlib.h>
int main() {
char a[] = "Java is a programing language.";
int i=0;
FILE *f1; // マージする2つのファイルを開く
f1 = fopen("java.txt", "w");
while (a[i] != '\0') {
fputc(a[i], f1);
i++;
}
fclose(f1);
char b[] = "kotlin is a programing language.";
int j =0;
FILE *f2;
f2 = fopen("kotlin.txt", "w");
while (b[j] != '\0') {
fputc(b[j], f2);
j++;
}
fclose(f2);
f1 = fopen("java.txt", "r");
f2 = fopen("kotlin.txt", "r");
FILE *f3 = fopen("ttpoint.txt", "w"); // 結果を保存するファイルを開く
char c;
if (f1 == NULL || f2 == NULL || f3 == NULL) {
puts("Could not open files");
exit(0);
}
while ((c = fgetc(f1)) != EOF) // 1つ目のファイルの内容を ttpoint.txt にコピー
fputc(c, f3);
while ((c = fgetc(f2)) != EOF) // 2つ目のファイルの内容を ttpoint.txt にコピー
fputc(c, f3);
fclose(f3);
f3 = fopen("ttpoint.txt", "r");
printf("Merged java.txt and kotlin.txt into ttpoint.txt\n");
while (!feof(f3))
putchar(fgetc(f3));
fclose(f1); // ファイルポインタを閉じる
fclose(f2);
fclose(f3);
return 0;
}実行結果
Merged java.txt and kotlin.txt into ttpoint.txt Java is a programing language.kotlin is a programing language.
ポイント解説
- fopen のモード指定: 書き込みには「w」、読み込みには「r」を使用します。「w」モードで開いた既存ファイルは上書きされるため注意が必要です。
- エラー処理:
fopen()が失敗すると NULL を返すため、必ず NULL チェックを行いましょう。 - EOF の扱い:
fgetc()はファイル末尾に達すると EOF を返します。この性質を利用して、while ループで1文字ずつコピーを行います。 - ファイルのクローズ: 開いたファイルは必ず
fclose()で閉じることで、バッファのフラッシュとリソースの解放が行われます。
このプログラムは、C言語における基本的なファイル入出力の流れ(オープン→読み書き→クローズ)を理解するのに役立ちます。応用として、コマンドライン引数でファイル名を受け取るように変更したり、行単位でコピーする fgets()/fputs() を使う方法なども試してみてください。
-
Windows 10で削除ファイルを復元!「Windows File Recovery(WINFR)」の使い方
Microsoftが無料で提供しているWindows File Recovery(winfr.exe)は、HDDやSSD、USBメモリなどさまざまな記録メディアから削除されたファイルを復元できる公式ツールです。Windows 10 バージョン2004(May 2020 Update)以降で利用可能で、コマンドプロンプトのコンソールモードで動作します。Microsoft Storeから無料でインストールでき、MFTテーブルやファイルタイプのシグネチャなどを利用した複数のスキャンモードに対応。NTFS、ReFS、FAT、exFATの各ファイルシステムをサポートし、ローカル接続されたデバイスから削除
-
CMD(コマンドプロンプト)を使ってExcelファイルを1つに結合する方法【4ステップ】
複数のExcelファイルをCMD(コマンドプロンプト)で1つにまとめたいとお考えなら、この記事がぴったりです。複数のExcelファイルに散らばったデータを統合したい場面はよくありますが、コマンドプロンプトでいくつかのコマンドを実行するだけで、素早く結合できます。それでは、本題に入りましょう。 ワークブックのダウンロード CMDを使ってExcelファイルを1つに結合する4つのステップ ここでは、ある会社の1月、2月、3月の売上記録を含む3つのファイル「January.xlsx」「February.xlsx」「March.xlsx」を用意しました。以下では、これらのファイルをCMDを使