Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

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言語ではシンプルなループ処理と標準入出力関数を組み合わせるだけで、テキストファイル間の差分検出ツールを簡単に作成することができます。

  1. Excelファイルを2つ比較して違いを強調表示する3つの方法

    パソコンの異なるフォルダに、よく似た名前のExcelファイルが2つ保存されていることはありませんか?それらが同じブックの複製なのか、別バージョンのファイルなのかを判断するのは意外と難しいものです。この記事では、Excelがインストールされていない環境でも対応できる、2つのExcelファイルを比較する方法を詳しく解説します。これらの比較ツールを活用すれば、ワークシート内のデータの不整合、古い値、壊れた数式、誤った計算などの問題を素早く発見できます。1. 「並べて表示」機能で2つのExcelシートを比較データ量が少なく、ひと目で内容を確認できる場合は、各ファイルを別ウィンドウで開き、Excel標準

  2. Windows 10/11でフォルダーやファイルを比較・同期する方法【無料ツール3選】

    Windowsでフォルダーやファイルを比較したい方は、ぜひこの記事を読んでみてください。ファイルやフォルダーの比較・同期に役立つ、無料で使える便利なツールをご紹介します。 大量のファイルをあるフォルダーから別のフォルダーへコピーしたとき、すべてのファイルが正しくコピー先に移ったか確認したいはずです。しかし、フォルダーやファイルを1つずつ手作業で比較して、同じ内容かどうかを確認するのは非常に手間がかかります。 この記事では、2つの異なるディレクトリの内容を簡単に比較し、完全なミラーコピーになるよう同期する方法を解説します。 Windows 11/10/8/7で2つのフォルダーの内容を比較・同期で