목차
- fopen 등의 파일 관련 API 이전 포스팅
- strstr 문자열 찾기 API 이전 포스팅
- 사용자에게 파일 경로와 특정 문자열 입력받기 예제
- 파일 열기 예제(fopen)
- 파일을 한 줄씩 읽고 특정 문자열 검사 예제(strstr)
- 결과 확인
fopen 등의 파일 관련 API 이전 포스팅
오늘 포스팅에서는 내 컴퓨터 로컬에 있는 특정 파일을 열고 내용을 읽어야합니다. 따라서 파일 처리 관련 API를 사용할 줄 알아아합니다. 이전에 C에서 파일을 처리하는 fopen, fwrite, fread등의 함수들에 대해 포스팅을 하였습니다. 해당 포스팅에서는 각 예제와 함께 파일 처리 하는 방법에 대한 내용이 포함되어있습니다.
아래 링크를 확인하여 파일 처리하는 방법에 대해 학습해주세요.
2021.12.01 - [C/stdio] - C 파일 생성 및 스트림 열기 예제(stdio/fopen)
strstr 문자열 찾기 API 이전 포스팅
또한, 파일의 데이터를 읽고 해당 파일에 어떤 문자열이 있는지 확인하기 위해서는 문자열 처리 관련 함수인 strstr에 대해 알고있어야합니다. 특정 문자열의 오프셋이 무엇인지 알고 이 오프셋을 활용하는 방법을 알아야합니다.
그리고 C에서 문자열 처리는 항상 포인터가 뒤따라옵니다. 포인터의 개념도 파악해주세요.
아래는 strstr 관련 포스팅 링크입니다.
2023.07.26 - [C] - [C/C++] strstr 문자열에서 특정 문자열 찾기
사용자에게 파일 경로와 특정 문자열 입력받기 예제
자 그러면 이제 외부로부터 즉, 사용자에게 특정 문자열과 검사 대상의 파일 경로를 입력받아 문자열이 포함되어있는지 확인하는 프로그램 코드를 작성해보겠습니다. 우선 아래와 같이 파일 경로와 문자열을 입력받는 코드를 작성합니다.
#include <stdio.h>
#include <string.h>
int main() {
char file_path[100];
char search_string[100];
printf("파일 경로를 입력하세요: ");
scanf("%s", file_path);
printf("찾을 문자열을 입력하세요: ");
scanf("%s", search_string);
return 0;
}
파일 열기 예제(fopen)
다음으로 입력받은 파일 경로와 fopen 함수를 이용하여 파일을 열고 fd를 획득합니다. 이후부터는 이 fd로 파일의 내용을 읽거나 씁니다.
#include <stdio.h>
#include <string.h>
int main() {
char file_path[100];
char search_string[100];
printf("파일 경로를 입력하세요: ");
scanf("%s", file_path);
printf("찾을 문자열을 입력하세요: ");
scanf("%s", search_string);
// 파일 열기
FILE *file = fopen(file_path, "r");
if (file == NULL) {
printf("파일을 열 수 없습니다.\n");
return 1;
} else {
printf("파일을 정상적으로 열었습니다.\n");
}
return 0;
}
파일을 한 줄씩 읽고 특정 문자열 검사 예제(strstr)
fgets 함수를 사용하여 텍스트 파일의 내용을 한 줄씩 읽어서 임시 버퍼에 저장합니다. 이후 strstr 함수에 이 버퍼 문자열 포인터를 전달하여 우리가 이전에 입력 받은 특정 문자열이 있는지 확인합니다.
#include <stdio.h>
#include <string.h>
int main() {
char file_path[100];
char search_string[100];
char line[1000];
int found = 0;
printf("파일 경로를 입력하세요: ");
scanf("%s", file_path);
printf("찾을 문자열을 입력하세요: ");
scanf("%s", search_string);
// 파일 열기
FILE *file = fopen(file_path, "r");
if (file == NULL) {
printf("파일을 열 수 없습니다.\n");
return 1;
} else {
printf("파일을 정상적으로 열었습니다.\n");
}
// 파일 내용을 한 줄씩 읽어서 검색
while (fgets(line, sizeof(line), file)) {
if (strstr(line, search_string)) {
printf("문자열 '%s'이(가) 파일에 존재합니다.\n", search_string);
found = 1;
break;
}
}
// 파일 닫기
fclose(file);
if (!found) {
printf("문자열 '%s'을(를) 찾을 수 없습니다.\n", search_string);
}
return 0;
}
결과 확인
아래와 같이 특정 문자열이 있는 경우에는 확인 메세지가 출력되고, 만약 문자열이 없는 경우에는 찾을 수 없다는 문구가 출력됩니다.