ํ์ผ ์ ์ถ๋ ฅ
์ด๋ฒ ํฌ์คํ ์ ๊ฐ๋จํ ์ฌ์ฉ์ ์ ๋ณด(์ด๋ฆ, ๋์ด, ์ด๋ฉ์ผ)๋ฅผ 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)๋ก ์ต๋ ์ ๋ ฅ ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๋ค.
์ด ์ฝ๋๋ ํ์ผ ์์ ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ์ฌ ํ์ผ ์ ์ถ๋ ฅ ์ค ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ค.
'๐ท C์ธ์ด 30๊ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++ Tip] 26. Char, String ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ (1) | 2024.11.10 |
---|---|
[C/C++ Tip] 25. C์ธ์ด 2์ฐจ์ ๋ฐฐ์ด (0) | 2024.11.10 |
[C/C++ Tip] 23. ์ง์ญ ๋ณ์, ์ ์ญ ๋ณ์, ์ ์ ๋ณ์ (0) | 2024.11.09 |
[C/C++ Tip] 22. C์ธ์ด ๋ฐ๋ณต๋ฌธ : While๋ฌธ (0) | 2024.11.09 |
[C/C++ Tip] 21. C์ธ์ด ๋ฐ๋ณต๋ฌธ: For๋ฌธ (0) | 2024.11.09 |