Computer >> Máy Tính >  >> Lập trình >> lập trình C

Chương trình C để xóa một dòng khỏi tệp

Tệp là một vị trí lưu trữ vật lý trên đĩa và thư mục là một đường dẫn hợp lý được sử dụng để tổ chức các tệp. Tệp tồn tại trong một thư mục.

Ba hoạt động mà chúng tôi có thể thực hiện trên tệp như sau -

  • Mở tệp.
  • Xử lý tệp (đọc, ghi, sửa đổi).
  • Lưu và đóng tệp.

Thuật toán

Một thuật toán được đưa ra bên dưới để giải thích chương trình C xóa một dòng khỏi tệp.

Bước 1 - Đọc đường dẫn tệp và số dòng cần xóa trong thời gian chạy.

Bước 2 - Mở tệp ở chế độ đọc và lưu trữ trong tệp nguồn.

Bước 3 - Tạo và mở một tệp tạm thời ở chế độ ghi và lưu trữ tham chiếu của nó trong tệp Tạm thời.

Bước 4 - Khởi tạo số đếm =1 để theo dõi số dòng.

Bước 5 - Đọc một dòng từ tệp nguồn và lưu trữ trong bộ đệm.

Bước 6 - Nếu dòng hiện tại không bằng dòng cần xóa, tức là if (dòng! =Count), thì hãy ghi bộ đệm vào tệp tạm thời.

Bước 7 - Số lượng tăng lên ++.

Bước 8 - Lặp lại bước 5-7 cho đến khi kết thúc tệp nguồn.

Bước 9 - Đóng cả hai tệp, tức là tệp nguồn và tệp tạm thời.

Bước 10 - Xóa tệp nguồn ban đầu của chúng tôi.

Bước 11 - Đổi tên tệp tạm thời bằng đường dẫn tệp nguồn.

Chương trình

Sau đây là chương trình C để xóa một dòng khỏi tệp -

#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++;
   }
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

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