MENU

C言語でテキストファイルを読み込み特定の1行を削除する

ネットで調べましたが、何やら難しいことが書かれていたので今回は非常に単純愚直な方法で実装しました。テキストファイルから1行ずつ読み込み、配列に格納。その後消したい行が格納されているchar配列の先頭文字\0 にして、これ以外をテキストファイルに上書きするという方法です。

ソースコード


#include <stdio.h>

int main(void)
{
  int i;
  int line = 0;  // 行数
  char arr[100][50];
  FILE *f;
  
  // ファイル開く
  f = fopen("data.txt", "r");
  if(f == NULL)
  {
    printf("load error");
    return -1;
  }
  
  // arr配列に1行ずつ格納
  for(i = 0; i < sizeof(arr)/sizeof(arr[0]) && fgets(arr[i], sizeof(arr[i]), f); i++)
  {
    line++;  // テキストファイルの行数
  }
  
  // ファイル閉じる
  fclose(f);
  
  // 特定の行(4行目)を削除
  arr[3][0] = '\0';  // 消したい行の先頭文字を\0にする
  
  // ファイル開く
  f = fopen("data.txt", "w");
  if(f == NULL)
  {
    printf("load error");
    return -1;
  }
  
  // ファイル書き込み
  for(i = 0; i < line; i++)
  {
    if(arr[i][0] != '\0')
    {
      fputs(arr[i], f);
    }
  }
  
  // ファイル閉じる
  fclose(f);

  return 0;
}