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

ファイルから行を削除するCプログラム


ファイルはディスク上の物理的な保存場所であり、ディレクトリはファイルを整理するために使用される論理パスです。ディレクトリ内にファイルが存在します。

ファイルに対して実行できる3つの操作は次のとおりです-

  • ファイルを開きます。
  • ファイルを処理します(読み取り、書き込み、変更)。
  • ファイルを保存して閉じます。

アルゴリズム

ファイルから行を削除するCプログラムを説明するためのアルゴリズムを以下に示します。

ステップ1 −実行時に削除するファイルパスと行番号を読み取ります。

ステップ2 −ファイルを読み取りモードで開き、ソースファイルに保存します。

ステップ3 −一時ファイルを作成して書き込みモードで開き、その参照を一時ファイルに保存します。

ステップ4 −カウント=1を初期化して、行番号を追跡します。

ステップ5 −ソースファイルから1行を読み取り、バッファに保存します。

ステップ6 −現在の行が削除する行と等しくない場合、つまり(line!=count)の場合、一時ファイルにバッファを書き込みます。

ステップ7 −カウントをインクリメント++。

ステップ8 −ソースファイルの最後まで手順5〜7を繰り返します。

ステップ9 −ソースファイルと一時ファイルの両方のファイルを閉じます。

ステップ10 −元のソースファイルを削除します。

ステップ11 −一時ファイルの名前をソースファイルパスに変更します。

プログラム

以下は、ファイルから行を削除するためのCプログラムです。 −

#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 1000
void deleteLine(FILE *src, FILE *temp, const int line);
void printFile(FILE *fptr);
int main(){
   FILE *src;
   FILE *temp;
   char ch;
   char path[100];
   int line;
   src=fopen("cprogramming.txt","w");
   printf("enter the text.press cntrl Z:\n");
   while((ch = getchar())!=EOF){
      putc(ch,src);
   }
   fclose(src);
   printf("Enter file path: ");
   scanf("%s", path);
   printf("Enter line number to remove: ");
   scanf("%d", &line);
   src = fopen(path, "r");
   temp = fopen("delete.tmp", "w");
   if (src == NULL || temp == NULL){
      printf("Unable to open file.\n");
      exit(EXIT_FAILURE);
   }
   printf("\nFile contents before removing line.\n\n");
   printFile(src);
   // Move src file pointer to beginning
   rewind(src);
   // Delete given line from file.
   deleteLine(src, temp, line);
   /* Close all open files */
   fclose(src);
   fclose(temp);
   /* Delete src file and rename temp file as src */
   remove(path);
   rename("delete.tmp", path);
   printf("\n\n\nFile contents after removing %d line.\n\n", line);
   // Open source file and print its contents
   src = fopen(path, "r");
   printFile(src);
   fclose(src);
   return 0;
}
void printFile(FILE *fptr){
   char ch;
   while((ch = fgetc(fptr)) != EOF)
   putchar(ch);
}
void deleteLine(FILE *src, FILE *temp, const int line){
   char buffer[BUFFER_SIZE];
   int count = 1;
   while ((fgets(buffer, BUFFER_SIZE, src)) != NULL){
      if (line != count)
         fputs(buffer, temp);
      count++;
   }
}

出力

上記のプログラムを実行すると、次の結果が得られます-

enter the text.press cntrl Z:
Hi welcome to my world
This is C programming tutorial
You want to learn C programming
Subscribe the course in TutorialsPoint
^Z
Enter file path: cprogramming.txt
Enter line number to remove: 2

File contents before removing line.
Hi welcome to my world
This is C programming tutorial
You want to learn C programming
Subscribe the course in TutorialsPoint

File contents after removing 2 line.

Hi welcome to my world
You want to learn C programming
Subscribe the course in TutorialsPoint

  1. tkinterメニューUIから破線を削除するにはどうすればよいですか?

    Tkinterのメニューウィジェットは、アプリケーションのナビゲーションバーにメニューバーを作成するために使用されます。これは、アプリケーションウィンドウの上部のタイトルバーの前にあります。最初のメニュー項目の上部に破線が表示されることがあります。 tearoff(boolean) メニューの属性は、メニューアイテムの挿入を開始すると、最初はすべてのアイテムが1からインデックスを作成することを指定します。ただし、ティアオフをオフにすると プロパティの場合、アイテムは0からインデックス作成を開始でき、破線は上から消えます。 例 # Import the tkinter library from

  2. TkinterメニューUIから破線を削除するにはどうすればよいですか?

    メニューバーには、垂直に積み重ねられたメニュー項目が含まれています。 Menu(root)のオブジェクトを初期化することで、メニューバーを作成できます。 。アプリケーションでメニューバーを初期化するたびに、メニューバーの上部に行区切り文字が表示されます。 メニューから区切り文字または破線を削除するには、ティアオフを使用できます。 財産。 tearoff =offを定義することで作成できます プロパティ。 例 #Import the required Libraries from tkinter import * from tkinter import ttk #Create an in