C言語でコマンドライン引数を使ってファイルを読み込み、行番号を追加するプログラムの作成方法

C言語関連

この記事では、C言語を使ってコマンドライン引数で指定したファイルを読み込み、各行の先頭に行番号を追加して保存するプログラムを作成する方法を解説します。さらに、指定したファイルが開かない場合はその旨を表示し、プログラムを終了する方法も紹介します。

1. コマンドライン引数でファイルを指定する

まず、コマンドライン引数でファイルを指定する方法について説明します。C言語でコマンドライン引数を受け取るには、`main`関数で`argc`(引数の数)と`argv`(引数の文字列配列)を使用します。これにより、プログラムを実行する際にファイル名を引数として渡すことができます。

以下のコード例では、コマンドライン引数で指定したファイルを開きます。

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s \n", argv[0]);
        return 1;
    }
    FILE *file = fopen(argv[1], "r");
    if (!file) {
        perror("Error opening file");
        return 1;
    }
    // ファイルを読み込み、行番号を追加する処理
    fclose(file);
    return 0;
}

このコードでは、コマンドライン引数として指定されたファイルを`fopen`関数で開き、開けなかった場合にはエラーメッセージを表示します。

2. 各行に行番号を追加する方法

次に、読み込んだファイルの各行に行番号を追加する方法を説明します。ファイルを行単位で読み込み、各行の先頭に番号を付けて新しいファイルに保存します。`fgets`を使って1行ずつ読み込み、`fprintf`で出力ファイルに行番号を追加します。

以下はそのためのコード例です。

FILE *outputFile = fopen("output.txt", "w");
if (!outputFile) {
    perror("Error creating output file");
    return 1;
}
char line[256];
int lineNumber = 1;
while (fgets(line, sizeof(line), file)) {
    fprintf(outputFile, "%d: %s", lineNumber++, line);
}
fclose(outputFile);

この部分では、`fgets`で行を読み込んだ後、行番号を付けて`output.txt`に書き込んでいます。

3. ファイルが開けない場合のエラーハンドリング

ファイルが存在しない場合やアクセス権が不足している場合には、エラーメッセージを表示してプログラムを終了する必要があります。`fopen`関数が失敗した場合、`NULL`が返されるため、エラーメッセージを表示して終了するようにします。

例えば、以下のようにエラーメッセージを表示し、プログラムを終了できます。

if (!file) {
    perror("Error opening file");
    return 1;
}

このコードでは、`perror`関数を使ってエラーメッセージを表示しています。

4. プログラムの全体の流れ

プログラム全体の流れを簡単にまとめます。ユーザーはコマンドライン引数でファイル名を指定し、プログラムはそのファイルを開いて、各行に番号を付けて新しいファイルに保存します。ファイルが開けない場合は、エラーメッセージを表示して終了します。

全体的なコードは以下のようになります。

#include 
#include 

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s \n", argv[0]);
        return 1;
    }

    FILE *file = fopen(argv[1], "r");
    if (!file) {
        perror("Error opening file");
        return 1;
    }

    FILE *outputFile = fopen("output.txt", "w");
    if (!outputFile) {
        perror("Error creating output file");
        fclose(file);
        return 1;
    }

    char line[256];
    int lineNumber = 1;
    while (fgets(line, sizeof(line), file)) {
        fprintf(outputFile, "%d: %s", lineNumber++, line);
    }

    fclose(file);
    fclose(outputFile);
    return 0;
}

まとめ

このプログラムでは、コマンドライン引数を使って指定したファイルを読み込み、各行に行番号を追加して保存する方法を紹介しました。ファイルが開けなかった場合にはエラーメッセージを表示し、プログラムが終了します。これを実行することで、簡単に行番号付きのファイルを作成することができます。

コメント

タイトルとURLをコピーしました