Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

파일에서 줄을 제거하는 C 프로그램

<시간/>

파일은 디스크의 물리적 저장 위치이고 디렉토리는 파일을 구성하는 데 사용되는 논리적 경로입니다. 디렉토리 내에 파일이 있습니다.

파일에 대해 수행할 수 있는 세 가지 작업은 다음과 같습니다. -

  • 파일을 엽니다.
  • 파일 처리(읽기, 쓰기, 수정).
  • 파일을 저장하고 닫습니다.

알고리즘

파일에서 한 줄을 제거하는 C 프로그램을 설명하는 알고리즘이 아래에 나와 있습니다.

1단계 − 런타임에 제거할 파일 경로와 줄 번호를 읽습니다.

2단계 − 읽기 모드에서 파일을 열고 소스 파일에 저장합니다.

3단계 − 쓰기 모드에서 임시 파일을 생성 및 열고 임시 파일에 해당 참조를 저장합니다.

4단계 − 행 번호를 추적하기 위해 count =1을 초기화합니다.

5단계 − 소스 파일에서 한 줄을 읽어 버퍼에 저장합니다.

6단계 − 현재 라인이 제거할 라인과 같지 않은 경우, 즉 if (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