Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 7 Text Files.

Similar presentations


Presentation on theme: "Chapter 7 Text Files."— Presentation transcript:

1 Chapter 7 Text Files

2 파일(file) 하나의 단위로 취급하는 외부 데이터의 단위 종류 보조메모리에 주로 저장 텍스트 파일 이진 파일
그래픽문자로 저장 라인(레코드) 단위로 분리 (\n) 이진 파일 보조메모리에 주로 저장 버퍼(buffer)를 통한 속도 조정 동시에 레코드 단위의 자료이동

3 Figure 7-1

4 파일과 스트림 C는 모든 파일을 스트림(stream)으로 본다. 파일 테이블 입출력을 문자의 열(시간의 흐름)로 봄
파일을 사용하는 부분과 외부파일을 연결 FILE *filename ; FILE *fpTempData;

5 Figure 7-2

6 Figure 7-3

7 표준 파일 세 개의 표준파일 <stdio.h>에 정의됨
표준입력(stdin), 표준출력(stdout), 표준에러(stderr)

8 Figure 7-4

9 사용자 정의 파일 FILE *fpStudents; /* file pointer */ FILE *fpGrades;
주로 파일포인터임을 보이기 위해 fp(file pointer)를 파일이름 앞에 쓰지만 다르게 써도 됨 FILE *grade;

10 Figure 7-5

11 Figure 7-6

12 표준 라이브러리 입/출력 함수 파일 열기 파일열기 fopen(“filename”, “mode”);
“r”: open for reading, file exists, the marker is positioned at begging, no file  error “w”: open for writing, file exists  emptied, no file  created “a”: open for append, 파일이 있으면 끝에 지시자 위치, 없으면 새로 생성 예) fpTempData = fopen(“TEMPS.DAT”, “w”); fpTempData = fopen(“A:\\TEMPS.DAT”, “w”); 오류의 예 파일 열기에 실패하면 file pointer 값이 NULL이 됨, 꼭 검사를 할 것 논리적 오류: if (fpTemp = fopen(“TEMPS.DAT”, “w”) == NULL)

13 Figure 7-7

14 Figure 7-8

15 파일 닫기 fpTemps = fopen(“TEMPS.DAT”, “w”); … fclose(fpTemps); 오류
성공하면 0을 반환 실패하면 EOF 값을 반환, <stdio.h>에 이 값이 상수로 정의되어 있으며, 주로 -1임 예) if(fclose(fpTemps) == EOF) {오류 처리}

16 형식화 입출력 함수 형식화에 대해서는 앞에서 설명했으므로 생략 표 7-2에 잘 정리되어 있음

17 Figure 7-9

18 Figure 7-10

19 Figure 7-11

20 Figure 7-12

21 Figure 7-13

22 scanf와 fscanf 표준입력 장치: scanf(scan formatted) 파일 입력: fscanf(file scanf)
형식 scanf(“format string”, address list); fscanf(fp, “format string”, address list); 입력변환은 다음까지 계속 파일의 끝 부적절한 문자 읽은 문자의 수가 명시된 최대필드 길이에 도달 읽은 후 scanf는 성공적으로 읽은 변수의 수를 반환한다. 데이터가 하나도 없으면 EOF를 반환한다.

23 Figure 7-14

24 Figure 7-15

25 #include <stdio.h>
#define FLUSH while (getchar() != '\n') #define ERR1 "\aPrice incorrect. Re-enter both fields\n" #define ERR2 "\aAmount incorrect. Re-enter both fields\n" int main (void) { int ioResult; int amount; float price; /* Read price and amount */ do printf("\nEnter amount and price: "); ioResult = scanf("%d%f", &amount, &price); if (ioResult != 2) FLUSH; if (ioResult == 1) printf(ERR1); else printf(ERR2); } /* if */ } while (ioResult != 2); printf("Amount: %d | Price: %5.2f\n", amount, price); return 0; } /* main */

26 #include <stdio.h>
#include <stdlib.h> int main (void) { /* Local Definitions */ FILE *fpIn; int numIn; /* Statements */ fpIn = fopen("P7-03.DAT", "r"); if (!fpIn) printf("Could not open file\a\n"); exit (101); } /* if open fail */ while ((fscanf(fpIn, "%d", &numIn)) == 1) printf("%d ", numIn); return 0; } /* main */

27 #include <stdio.h>
#include <stdlib.h> int main (void) { FILE *fpIn; FILE *fpOut; int numIn; int closeResult; printf("Running file copy\n"); fpIn = fopen("P7-03.DAT", "r"); if (!fpIn) printf("Could not open input file\a\n"); exit (101); } /* if open fail */ fpOut = fopen("P7-04.DAT", "w"); if (!fpOut) printf("Could not open output file\a\n"); exit (102); while ((fscanf(fpIn, "%d", &numIn)) == 1) fprintf(fpOut, "%d\n", numIn); closeResult = fclose(fpOut); if (closeResult == EOF) printf("Could not close output file\a\n"); exit (201); } /* if close fail */ printf("File copy complete\n"); return 0; } /* main */

28 문자 입출력 함수: 표준입출력 한 문자 입력 한 문자 출력 형식: int getchar(void) ;
오류가 발생하면 EOF를 반환 반환을 정수로 하는 이유는 EOF 때문임 한 문자 출력 형식: int putchar(int out_char) ; 오류가 발생하면 EOF반환 성공하면 출력한 값을 반환

29 문자 입출력: 파일 입출력 getc, fgetc putc, fputc 형식: 예: 파일의 끝을 만나거나 오류면 EOF를 반환
int getc(FILE *fpIn); int fgetc(FILE *fpIn); 예: nextChar = getc(fpMyFile); nextChar = fgetc(fpMyFile); 파일의 끝을 만나거나 오류면 EOF를 반환 putc, fputc int putc (int oneChar, FILE *fpOut); int fputc (int oneChar, FILE *fpOut); putc(oneChar, fpMyfile); fputc(oneChar, fpMyfile); 오류가 생기면 모두 EOF를 반환, 성공하면 출력 값을 반환

30 ungetc ungetc getc와 반대로 읽은 것 하나를 되돌림
다수 문자를 되돌릴 수 있는지는 시스템에 따라 가르므로 사용하지 말 것, 다수를 돌릴 수 있을 때 돌리지 못하면 EOF를 출력 int ungetc(int oneChar, FILE *stream); 사용 예 option = getc(stdin); if (isdigit(option)) ungetc(option, stdin); else ….

31 #include <stdio.h>
int main (void) { FILE *fpText; int c; int closeStatus; printf("This program copies your input to a file.\n"); printf("When you are through, enter <EOF>.\n\n"); if (!(fpText = fopen("P7-07.DAT","w"))) printf("Error opening FILE1.DAT for writing"); return (1); } /* if open */ while ((c = getchar()) != EOF) fputc(c, fpText); closeStatus = fclose(fpText); if (closeStatus == EOF) printf("Error closing file\a\n"); return 100; } /* if */ printf("\n\nYour file is complete\n"); return 0; } /* main */

32 실습과 8장 예습 실습 예습 텍스트를 읽어서 자음, 모음, 구두점 수 및 단어 수를 출력하는 프로그램을 작성하라.
파일에서 정수 숫자를 읽어 짝수와 홀수를 구별하여 다른 파일에 저장하는 프로그램을 작성하라. 문제 22, 47 예습 8, 16, 17, 28번


Download ppt "Chapter 7 Text Files."

Similar presentations


Ads by Google