ํŒŒ์ผ ์ž…์ถœ๋ ฅ

์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด(์ด๋ฆ„, ๋‚˜์ด, ์ด๋ฉ”์ผ)๋ฅผ CSV ํ˜•์‹์œผ๋กœ  txt ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ , ์ €์žฅ๋œ ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฝ์–ด์™€์„œ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ์‹ค์ œ C์–ธ์–ด์—์„œ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ ์ ์€ ํฌ๊ฒŒ ์—†๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ผ์ด ์“ฐ๊ณ  ์ฝํžˆ๋Š” ๊ธฐ๋ณธ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

โญ 1. ํŒŒ์ผ ์“ฐ๊ธฐ ์˜ˆ์ œ

๋จผ์ € ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ txt ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ์˜ˆ์ œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด fprintf ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ ํ•„๋“œ๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฐ ๋ ˆ์ฝ”๋“œ๋Š” ์ƒˆ๋กœ์šด ์ค„์— ์œ„์น˜ํ•œ๋‹ค.

#include <stdio.h>

int main() {
    // ํŒŒ์ผ ํฌ์ธํ„ฐ ์„ ์–ธ
    FILE *fp = fopen("test.txt", "w");
    if (fp == NULL) {
        perror("ํŒŒ์ผ ์—ด๊ธฐ ์‹คํŒจ");
        return -1;
    }

    // ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ (์ด๋ฆ„, ๋‚˜์ด, ์ด๋ฉ”์ผ)
    fprintf(fp, "์ด๋ฆ„,๋‚˜์ด,์ด๋ฉ”์ผ\n"); // ํ—ค๋” ์ž‘์„ฑ
    fprintf(fp, "ํ™๊ธธ๋™,30,hong@example.com\n");
    fprintf(fp, "๊น€์ฒ ์ˆ˜,25,kim@example.com\n");

    // ํŒŒ์ผ ๋‹ซ๊ธฐ
    fclose(fp);

    printf("๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n");

    return 0;
}
๋ชจ๋“œ
์„ค๋ช…
r
์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ํŒŒ์ผ ์—ด๊ธฐ. ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์—ด๊ธฐ ์‹คํŒจ.
w
์“ฐ๊ธฐ ์ „์šฉ์œผ๋กœ ํŒŒ์ผ ์—ด๊ธฐ. ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ , ์—†์œผ๋ฉด ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ.
a
์ถ”๊ฐ€ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์—ด๊ธฐ. ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ ๋์— ์ถ”๊ฐ€ํ•˜๊ณ , ์—†์œผ๋ฉด ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ.
r+
์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์—ด๊ธฐ. ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์—ด๊ธฐ ์‹คํŒจ.
w+
์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์—ด๊ธฐ. ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ , ์—†์œผ๋ฉด ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ.
a+
์ถ”๊ฐ€/์ฝ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์—ด๊ธฐ. ํŒŒ์ผ ๋์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ.
rb, wb, ab, rb+, wb+, ab+
์œ„ ๋ชจ๋“œ๋“ค์— b๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด์ง„ ํŒŒ์ผ๋กœ ์ž‘์—…ํ•  ๋•Œ ์‚ฌ์šฉ. ์˜ˆ: rb๋Š” ์ด์ง„ ํŒŒ์ผ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ด๊ธฐ.

์ด ์ฝ”๋“œ๋Š” test.txt๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , ํŒŒ์ผ์— ์ด๋ฆ„, ๋‚˜์ด, ์ด๋ฉ”์ผ ์ •๋ณด๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฐจ๋ก€๋กœ ํŒŒ์ผ์— ์“ด๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ์ˆœ์„œ์ด๋‹ค. ์šฐ์„ , ํŒŒ์ผ์„ ์—ด์–ด์•ผ ํ•œ๋‹ค. ํŒŒ์ผ์ด ์—ด๋ ธ๋‹ค๋ฉด ์ด์ œ๋Š” ํŒŒ์ผ์— ์ฝ๊ธฐ ์“ฐ๊ธฐ๋ฅผ ํ•  ์ค€๋น„๊ฐ€ ๋œ ์…ˆ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํŒŒ์ผ์— ์“ด๋‹ค. ์“ฐ๊ธฐ ์ž‘์—…์ด ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด, ๊ผญ ํŒŒ์ผ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค. ์ œ๋Œ€๋กœ ๋‹ซ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค๋ฉด ํŒŒ์ผ์ด ๊นจ์ง€๊ฑฐ๋‚˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ์›๋ฆฌ๋Š” c์–ธ์–ด๋Š” ๊ณ ์‚ฌํ•˜๊ณ  ํŒŒ์ด์ฌ, ์ž๋ฐ”์™€ ๋™์ผํ•˜๋‹ˆ ๊ผญ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.

โญ 2. ํŒŒ์ผ ์ฝ๊ธฐ ์˜ˆ์ œ

๋‹ค์Œ์œผ๋กœ ์ €์žฅ๋œ txt ํŒŒ์ผ์„ ์ฝ์–ด์™€ ์ฝ˜์†”์— ์ถœ๋ ฅํ•œ๋‹ค. ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด fscanf ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค.

#include <stdio.h>

int main() {
    // ํŒŒ์ผ ํฌ์ธํ„ฐ ์„ ์–ธ
    FILE *fp = fopen("users.csv", "r");
    if (fp == NULL) {
        perror("ํŒŒ์ผ ์—ด๊ธฐ ์‹คํŒจ");
        return -1;
    }

    char name[100], email[100];
    int age;

    // ํ—ค๋” ์ฝ๊ธฐ
    fscanf(fp, "%*s %*s %*s\n"); // ์ฒซ ๋ฒˆ์งธ ์ค„(ํ—ค๋”)๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

    // ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ (์ด๋ฆ„, ๋‚˜์ด, ์ด๋ฉ”์ผ)
    while (fscanf(fp, "%[^,],%d,%[^,\n]\n", name, &age, email) != EOF) {
        printf("์ด๋ฆ„: %s, ๋‚˜์ด: %d, ์ด๋ฉ”์ผ: %s\n", name, age, email);
    }

    // ํŒŒ์ผ ๋‹ซ๊ธฐ
    fclose(fp);

    return 0;
}

โญ 3. ์ฃผ์˜์‚ฌํ•ญ

โ—†  ์ž˜๋ชป๋œ ์˜ˆ์‹œ ์ฝ”๋“œ

#include <stdio.h>

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

    // ํŒŒ์ผ ์—ด๊ธฐ (ํŒŒ์ผ ํฌ์ธํ„ฐ NULL ์ฒดํฌ ์—†์Œ)
    file = fopen("example.txt", "r");

    // ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ (ํŒŒ์ผ ํฌ์ธํ„ฐ๊ฐ€ NULL์ธ์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Œ)
    fscanf(file, "%s", buffer);
    printf("ํŒŒ์ผ ๋‚ด์šฉ: %s\n", buffer);

    // ํŒŒ์ผ ๋‹ซ๊ธฐ (fclose ์—†์Œ)
    return 0;
}

์œ„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค: 

ํŒŒ์ผ ํฌ์ธํ„ฐ NULL ๊ฒ€์‚ฌ ์—†์Œ: fopen() ํ•จ์ˆ˜๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ file ํฌ์ธํ„ฐ๋Š” NULL์ด ๋˜๋Š”๋ฐ, ์ด๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŒŒ์ผ ๋‹ซ๊ธฐ(fclose) ์—†์Œ: ํŒŒ์ผ ์ž‘์—…์ด ๋๋‚œ ํ›„ fclose()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ํŒŒ์ผ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โ—‡ ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ ์ฝ”๋“œ

์•„๋ž˜๋Š” ํŒŒ์ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์—ด์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ž‘์—… ํ›„ ํŒŒ์ผ์„ ์ œ๋Œ€๋กœ ๋‹ซ๋Š” ์ˆ˜์ •๋œ ์ฝ”๋“œ์ด๋‹ค.

#include <stdio.h>

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

    // ํŒŒ์ผ ์—ด๊ธฐ
    file = fopen("example.txt", "r");
    
    // ํŒŒ์ผ ํฌ์ธํ„ฐ NULL ๊ฒ€์‚ฌ
    if (file == NULL) {
        perror("ํŒŒ์ผ ์—ด๊ธฐ ์˜ค๋ฅ˜");
        return 1; // ํŒŒ์ผ ์—ด๊ธฐ์— ์‹คํŒจํ•œ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
    }

    // ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ
    if (fscanf(file, "%99s", buffer) == 1) {
        printf("ํŒŒ์ผ ๋‚ด์šฉ: %s\n", buffer);
    } else {
        printf("ํŒŒ์ผ ์ฝ๊ธฐ ์‹คํŒจ ๋˜๋Š” ๋นˆ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.\n");
    }

    // ํŒŒ์ผ ๋‹ซ๊ธฐ
    fclose(file);

    return 0;
}

์ด ์ˆ˜์ •๋œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ์—์„œ ์ˆ˜์ •๋˜์—ˆ๋‹ค.

  • ํŒŒ์ผ ํฌ์ธํ„ฐ NULL ๊ฒ€์‚ฌ: fopen()์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ file์ด NULL์ด ๋˜๋ฏ€๋กœ, if (file == NULL)์„ ํ†ตํ•ด ํŒŒ์ผ์ด ์ œ๋Œ€๋กœ ์—ด๋ ธ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ์‹คํŒจ ์‹œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • fclose ์‚ฌ์šฉ: ํŒŒ์ผ ์ž‘์—…์ด ๋๋‚œ ํ›„ ๋ฐ˜๋“œ์‹œ fclose(file)์„ ํ˜ธ์ถœํ•˜์—ฌ ํŒŒ์ผ์„ ๋‹ซ๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ œํ•œ: fscanf(file, "%99s", buffer)๋กœ ์ตœ๋Œ€ ์ž…๋ ฅ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฉ์ง€ํ–ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ํŒŒ์ผ ์ž‘์—…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
18์ง„์ˆ˜