C言語で2つのテキストファイルを比較し、不一致箇所を検出・報告する方法
C言語では、プログラマはファイルにアクセスし、その内容を読み書きすることができます。ファイルとは、情報を格納するための単純なメモリブロックであり、ここではテキストデータのみを扱います。
この記事では、2つのファイルを比較して不一致(差分)を検出し、その結果を報告するプログラムを紹介します。比較対象となる2つのファイルはほぼ同じ内容ですが、一部の文字が異なる場合があります。さらに、このプログラムは最初に不一致が発生した位置の「行番号」と「行内での文字位置」も出力します。
アルゴリズム
ファイル比較の処理は、以下の手順で行います。
ステップ1:両方のファイルを読み込みモードで開き、ファイルポインタを先頭に設定する。 ステップ2:getc()関数を使って、各ファイルから1文字ずつデータを取得する。 ステップ3:取得した文字同士を比較する。文字が異なる場合は、エラー件数をカウントし、その行番号と位置を出力する。
サンプルコード
以下が、2つのファイルを比較するCプログラムの実装例です。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void compareFiles(FILE *file1, FILE *file2) {
char ch1 = getc(file1);
char ch2 = getc(file2);
int error = 0, pos = 0, line = 1;
while (ch1 != EOF && ch2 != EOF) {
pos++;
// 改行が一致したら行番号を進め、位置をリセット
if (ch1 == '\n' && ch2 == '\n') {
line++;
pos = 0;
}
// 文字が異なる場合はエラーとして報告
if (ch1 != ch2) {
error++;
printf("行番号 : %d\tエラー位置 : %d\n", line, pos);
}
ch1 = getc(file1);
ch2 = getc(file2);
}
printf("合計エラー数 : %d\t", error);
}
int main() {
FILE *file1 = fopen("file1.txt", "r");
FILE *file2 = fopen("file2.txt", "r");
if (file1 == NULL || file2 == NULL) {
printf("エラー : ファイルを開けませんでした");
exit(0);
}
compareFiles(file1, file2);
fclose(file1);
fclose(file2);
return 0;
}実行例
以下のような内容の2つのファイルを用意して比較してみます。
// ファイルの内容 File1 : Hello! Welcome to tutorials Point File2 : Hello! Welcome to turoials point
実行すると、次のような結果が出力されます。
行番号 : 2 エラー位置 : 15 合計エラー数 : 1
解説
- fopen():ファイルを読み込みモード("r")で開きます。ファイルが存在しない場合はNULLが返されるため、事前にチェックしています。
- getc():ファイルから1文字ずつ読み込む標準ライブラリ関数です。ファイル末尾に達するとEOFを返します。
- whileループ:両方のファイルが終端(EOF)に達するまで1文字ずつ比較を続けます。
- 改行の判定:両方の文字が '\n' だった場合に行番号をインクリメントし、位置カウンタを0に戻します。
- fclose():使用後のファイルは必ず閉じてリソースを解放しましょう。
このように、C言語ではシンプルなループ処理と標準入出力関数を組み合わせるだけで、テキストファイル間の差分検出ツールを簡単に作成することができます。
-
Excelファイルを2つ比較して違いを強調表示する3つの方法
パソコンの異なるフォルダに、よく似た名前のExcelファイルが2つ保存されていることはありませんか?それらが同じブックの複製なのか、別バージョンのファイルなのかを判断するのは意外と難しいものです。この記事では、Excelがインストールされていない環境でも対応できる、2つのExcelファイルを比較する方法を詳しく解説します。これらの比較ツールを活用すれば、ワークシート内のデータの不整合、古い値、壊れた数式、誤った計算などの問題を素早く発見できます。1. 「並べて表示」機能で2つのExcelシートを比較データ量が少なく、ひと目で内容を確認できる場合は、各ファイルを別ウィンドウで開き、Excel標準
-
Windows 10/11でフォルダーやファイルを比較・同期する方法【無料ツール3選】
Windowsでフォルダーやファイルを比較したい方は、ぜひこの記事を読んでみてください。ファイルやフォルダーの比較・同期に役立つ、無料で使える便利なツールをご紹介します。 大量のファイルをあるフォルダーから別のフォルダーへコピーしたとき、すべてのファイルが正しくコピー先に移ったか確認したいはずです。しかし、フォルダーやファイルを1つずつ手作業で比較して、同じ内容かどうかを確認するのは非常に手間がかかります。 この記事では、2つの異なるディレクトリの内容を簡単に比較し、完全なミラーコピーになるよう同期する方法を解説します。 Windows 11/10/8/7で2つのフォルダーの内容を比較・同期で