×

Đọc một chuỗi ký tự từ một tập tin với hàm fgets() trong C

Việc đọc dữ liệu từ một tập tin là một kỹ năng quan trọng trong lập trình, đặc biệt khi làm việc với ngôn ngữ C. Một trong số các hàm phổ biến và hiệu quả để thực hiện nhiệm vụ này là fgets(). Hàm này giúp chúng ta đọc một chuỗi ký tự từ một tập tin và đưa chúng vào một mảng ký tự (string).

Tìm hiểu về hàm fgets()

Hàm fgets() có prototype như sau:

char *fgets(char *str, int n, FILE *stream);
  • str: Là mảng ký tự nơi chuỗi đọc được sẽ được lưu trữ.
  • n: Là số lượng ký tự tối đa mà fgets() sẽ đọc, bao gồm cả ký tự null kết thúc chuỗi.
  • stream: Là con trỏ tới tập tin được mở trước đó bằng hàm fopen().

Hàm fgets() sẽ tiếp tục đọc ký tự từ tập tin cho đến khi một trong các điều kiện sau đây xảy ra:

  1. Đọc được một ký tự newline (\n).
  2. Đạt đến số lượng ký tự tối đa (n-1).
  3. Đạt đến cuối tập tin (EOF).

Nếu đọc thành công, fgets() sẽ trả về con trỏ tới chuỗi (str). Nếu gặp lỗi hoặc cuối tập tin, hàm sẽ trả về NULL.

Sử dụng hàm fgets()

Để minh họa việc sử dụng hàm fgets(), hãy xem xét ví dụ sau:

#include <stdio.h>

int main() {
    FILE *filePointer;
    char buffer[100];

    // Mở tập tin để đọc
    filePointer = fopen("example.txt", "r");
    if (filePointer == NULL) {
        perror("Error opening file");
        return -1;
    }

    // Đọc từng dòng từ tập tin sử dụng fgets()
    while (fgets(buffer, sizeof(buffer), filePointer) != NULL) {
        printf("%s", buffer);
    }

    // Đóng tập tin
    fclose(filePointer);
    return 0;
}

Giải thích chi tiết:

  1. Mở tập tin:

    filePointer = fopen("example.txt", "r");
    

    Tập tin example.txt được mở ở chế độ đọc ("r"). Nếu tập tin không tồn tại hoặc không thể mở, fopen() sẽ trả về NULL.

  2. Đọc từ tập tin:

    while (fgets(buffer, sizeof(buffer), filePointer) != NULL) {
        printf("%s", buffer);
    }
    

    Sử dụng vòng lặp while để đọc từng dòng từ tập tin cho đến khi gặp lỗi hoặc đạt tới cuối tập tin. Kết quả đọc được sẽ được lưu vào buffer, sau đó được in ra màn hình.

  3. Đóng tập tin:

    fclose(filePointer);
    

    Sau khi hoàn tất thao tác, luôn cần đóng tập tin để giải phóng tài nguyên.

Một số lưu ý quan trọng:

  • Kích thước bộ đệm (buffer size): Bạn nên đảm bảo rằng kích thước của buffer đủ lớn để chứa các dòng ký tự từ tập tin. Nếu không, dữ liệu có thể bị cắt mất.
  • Kiểm tra lỗi: Luôn kiểm tra kết quả của các hàm như fopen(), fgets(), và fclose() để đảm bảo chúng không gặp lỗi.

Kết luận

Hàm fgets() là một công cụ mạnh mẽ và tiện lợi trong C để đọc dữ liệu chuỗi từ tập tin. Thông qua các bước mở, đọc và đóng tập tin, bạn có thể dễ dàng xử lý các tệp văn bản trong chương trình của mình. Việc nắm vững cách sử dụng fgets() không chỉ giúp bạn làm việc hiệu quả hơn mà còn giúp bạn tránh được các lỗi phổ biến liên quan đến xử lý tập tin.

Comments