이번 글에서는 C 프로그래밍을 활용해 텍스트 파일에 담긴 전체 줄 수를 구하는 방법을 살펴보겠습니다.
이 프로그램은 지정한 파일을 연 뒤 내용을 한 문자씩 읽어 들이고, 마지막에 파일의 총 줄 수를 출력합니다. 줄 수를 세는 핵심 아이디어는 간단합니다. 바로 개행 문자(\n)가 등장할 때마다 카운트를 1씩 증가시키는 것입니다.
입력:
파일 "test.txt"
Hello friends, how are you?
This is a sample file to get line numbers from the file.
출력:
총 줄 수: 2동작 원리
프로그램의 동작 과정은 다음과 같습니다.
- 파일 열기: fopen() 함수로 파일을 읽기 모드("r")로 엽니다.
- 오류 처리: fopen()이 NULL을 반환하면 파일이 존재하지 않거나 열 수 없는 것이므로 오류 메시지를 출력하고 프로그램을 종료합니다.
- 줄 수 카운트: fgetc() 함수로 파일 끝(EOF)에 도달할 때까지 한 문자씩 읽으면서, 개행 문자('\n')를 만날 때마다 카운터 변수(linesCount)를 1씩 증가시킵니다.
- 결과 출력: 읽기가 끝나면 fclose()로 파일을 닫고, printf()로 총 줄 수를 화면에 출력합니다.
예제 코드
#include <stdio.h>
#define FILENAME "test.txt"
int main() {
FILE *fp;
char ch;
int linesCount = 0;
// 파일을 읽기 모드로 열기
fp = fopen(FILENAME, "r");
if (fp == NULL) {
printf("File \"%s\" does not exist!!!\n", FILENAME);
return -1;
}
// 한 문자씩 읽으면서 개행 문자 확인
while ((ch = fgetc(fp)) != EOF) {
if (ch == '\n')
linesCount++;
}
// 파일 닫기
fclose(fp);
// 줄 수 출력
printf("Total number of lines are: %d\n", linesCount);
return 0;
}참고 사항
- 파일의 마지막 줄이 개행 문자 없이 끝난다면 해당 줄은 카운트되지 않습니다. 필요하다면 반복문이 끝난 뒤 마지막으로 읽은 문자가 '\n'이 아니었는지 검사하는 로직을 추가하면 됩니다.
- fgetc()의 반환값에는 EOF(-1)가 포함될 수 있으므로, char형보다는 int형 변수에 저장하는 것이 더 안전합니다.
이처럼 개행 문자의 개수만 세면 되기 때문에 구현이 매우 간단하지만, 로그 파일 분석 등 실무에서도 자주 활용되는 기본적인 파일 처리 기법입니다.