600 likes | 904 Views
최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 11 장 : 파일 입출력 도서출판 - 인터비젼. 11 장 파일 입출력. 학습목표 1. 스트림과 파일 시스템을 이해한다 . 2. 파일 관련 표준 함수를 이해한다 . 3. 순차 파일과 이진 파일에 대해 이해한다 . 4. 표준 입출력 함수를 이해한다. 목차. 11 장 파일 입출력 예습시간 스트림과 파일 그리고 표준 입출력 파일 입출력 함수 실습시간 텍스트 파일 활용 이진 파일 활용 연습시간 파일 입출력 분석.
E N D
최신 C프로그래밍 언어문제해결에서 프로그래밍까지 개정판 11장 : 파일 입출력 도서출판 - 인터비젼
11장 파일 입출력 • 학습목표 • 1. 스트림과 파일 시스템을 이해한다. • 2. 파일 관련 표준 함수를 이해한다. • 3. 순차 파일과 이진 파일에 대해 이해한다. • 4. 표준 입출력 함수를 이해한다.
목차 • 11장 파일 입출력 • 예습시간 • 스트림과 파일 그리고 표준 입출력 • 파일 입출력 함수 • 실습시간 • 텍스트 파일 활용 • 이진 파일 활용 • 연습시간 • 파일 입출력 분석
스트림과 파일 그리고 표준 입출력 예습시간 – 1 교시
스트림과 파일 그리고 표준 입출력 • 학습 개요 • 외부장치와의 논리적인 흐름을 나타내는 스트림을 이해한다. • 스트림과 파일의 관계를 이해한다. • 표준 입/출력 함수들에 대해 다룬다.
스트림과 파일 그리고 표준 입출력 • 스트림(Stream)과 파일(File) • 스트림(Stream) • 컴퓨터와 연결된 여러 주변장치와의 논리적인 흐름 • 주변장치와 연결하는 접속 채널의 개념 • 컴퓨터와 주변장치의 정보전달은 스트림을 통해 이루어짐 • 모든 정보는 스트림을 통해 전달 • 파일 • C언어에서 파일은 모든 주변 장치를 포함한다. • 디스크에 저장된 파일 • 디스플레이 화면 • 키보드 • 프린터 • 직/병렬 포트 • 테이프 등등…
스트림과 파일 그리고 표준 입출력 • 스트림과 파일 • 스트림과 파일의 관계 • 스트림은 파일을 연결하기 위한 논리적인 접근 통로 • 오픈된 스트림을 통해 정보를 전달하거나 받아들임 • 스트림 사용을 위해서는 항상 오픈(Open) 되어야하고 사용 후 닫아(Close) 주어야 한다. • C언어에서 제공되는 표준 입/출력 장치 • 키보드 : 표준 입력 장치 • 디스플레이 화면 : 표준 출력 장치 • 표준 스트림 • 표준 입/출력 장치의 연결을 위해 사용되는 스트림 • C 프로그램 시작시 자동적으로 오픈되어 사용 가능하다. • 종류 • stdin : 표준 입력 스트림 (키보트와 연결된 스트림) • stdout : 표준 출력 스트림 (디스플레이 화면과 연결된 스트림) • stderr : 표준 에러 스트림 (디스플리이 화면과 연결된 스트림)
스트림과 파일 그리고 표준 입출력 • 표준 입출력 함수 • 표준 입/출력 스트림을 이용하는 함수 • 표준 입/출력 함수 정의 헤더 파일 • stdio.h • 표준 입출력 함수의 종류 • 형식이 있는 입출력 함수 – printf(), scanf() • 단일 문자 입출력 함수 – getchar(), putchar() • 문자열 입출력 함수 – gets(), puts() • 버퍼형 입출력 함수 – sscanf(), sprintf()
스트림과 파일 그리고 표준 입출력 • 단일 문자 입출력 함수 • 단일 문자 입력 함수 – getchar() • 함수의 원형 • int getchar() • 키보드로 부터 하나의 문자를 입력 받는다. • 리턴 결과 • 정상적 수행 : 해당 문자에 대한 ASCII 코드 값 • 비정상적 수행 : EOF 값 반환 • 단일 문자 출력 함수 – putchar() • 함수의 원형 • int putchar(int ch) • 화면에 ch에 해당되는 문자를 출력 • 리턴 결과 • 정상적 수행 : 입력된 값이 반환 • 비정상적 수행 : EOF 값 반환
스트림과 파일 그리고 표준 입출력 • 단일 문자 입/출력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03 char ch; • 04 printf("한문자 입력 :"); • 05 ch = getchar(); // 한 문자 입력 • 06 printf("입력받은 결과 출력 : "); • 07 putchar(ch); // 입력받은 문자 출력 • 08 putchar('\n'); // 특수 문자 출력 • 09 } • 출력 결과 : _______________ 입력된 문자 출력
스트림과 파일 그리고 표준 입출력 • 문자열 입출력 함수 • 문자열 입력함수 – gets() • 함수의 원형 • char *gets(char *str); • 키보드로 부터 입력된 문자열 값을 저장 • *str : 입력된 문자열 저장 주소 • 입력된 문자열은 키보드로부터 <Enter>키를 누른 위치까지 포함 • 공백문자도 문자열에 포함됨 • <Enter>값은 자동적으로 '\0'(NULL) 값으로 변경되어 저장됨 • 반환 결과 • 정상적일 경우 : 저장된 문자열의 주소 • 비정상적일 경우 : EOF 값
스트림과 파일 그리고 표준 입출력 • 문자열 입출력 함수 • 문자열 출력함수 – puts() • 함수의 원형 • int puts(char *str); • 입력된 문자열(*str)을 화면에 출력 • 출력시 '\0' 값은 '\n'(Enter) 값으로 변형되어 출력 • 반환 결과 • 정상적일 경우 : 음이 아닌 값 • 에러 발생 시 : EOF 값 반환
스트림과 파일 그리고 표준 입출력 • 문자열 입출력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03 char buffer[80], *bp; • 04 printf("문자열 입력 : "); • 05 bp = gets(buffer); // 문자열 입력 • 06 if(bp != EOF){ // 정상적인 입력 시 • 07 puts("입력된 문자열"); • 08 puts(bp); // 포인터를 통한 출력 • 09 puts(buffer); // 배열을 통한 출력 • 10 } • 11 } • 입력 값 : 안녕하세요 여러분 • 출력 결과:_____________________ • :_____________________ 안녕하세요 여러분 안녕하세요 여러분
스트림과 파일 그리고 표준 입출력 • 버퍼형 입출력 함수 • 형식을 가진 형태로 표준입출력 스트림이 아닌 문자열 변수공간(Buffer)에 값을 저장하거나 읽어올 때 사용 • 버퍼형 입력 함수 – sscanf() • 함수의 원형 • int sscanf(char *buffer, char *format [,argument ] ... ); • buffer : 입력 데이터가 존재하는 문자열 주소 • format : 형식지정문자를 포함한 문자열 • argument : 값을 저장할 변수 리스트 • 문자열로 저장된 데이터를 형식에 맞도록 추출할 목적으로 사용
스트림과 파일 그리고 표준 입출력 • 버퍼형 입력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03 char token[] = "128 14.8 language"; • 04 int i; • 05 float f; • 06 char name[80]; • 07 //문자열로부터 각각의 데이터 추출 • 08 sscanf( token, "%d %f %s", &i,&f,name ); • 09 //추출 내용 출력 • 10 printf( "Integer = %d, Float = %f, String = %s\n", i,f,name ); • 11 } • 출력 결과 : _________________________________________ 128 14.8 language
스트림과 파일 그리고 표준 입출력 • 버퍼형 출력함수 – sprintf() • 형식화된 문자열을 화면이 아닌 문자열 변수에 저장 • 여러 데이터 유형을 문자열로 만들 때 유용 • 함수의 원형 • int sprintf(char *buffer, char *format [,argument] ... ); • buffer : 출력할 문자열의 주소 • format : 형식지정문자를 포함한 문자열 • argument : 값을 저장하고 있는 변수 리스트 • buffer에 출력된 문자열의 수 반환
스트림과 파일 그리고 표준 입출력 • 버퍼형 출력함수 사용 예 • 01 #include <stdio.h> • 02 void main() • 03 { • 04 char buffer[200]; • 05 int i = 28,j; • 06 double d = 1.3456; • 07 char c='x'; • 08 char str[] = "c programming"; • 09 j = sprintf(buffer,"i= %d, d = %f, c= %c \n",i,d,c); • 10 j = sprintf(buffer + j, "str = %s", str); • 11 puts(buffer); • 12 } • 출력결과 : __________________________________ • ______________________________________ i= 28, d = 1.3456, c= x c programming
파일 입출력 함수 예습시간 – 2 교시
파일 입출력 함수 • 학습 개요 • 일반 파일에 대한 처리 과정을 이해한다. • 파일 시스템과 파일 조작함수에 대해 다룬다. • 파일의 종류와 이 파일의 입출력 함수들에 대해 알아본다. • 파일의 임의 접근 방식에 대해 이해한다.
파일 입출력 함수 • 파일 시스템의 개요 • 파일에 데이터를 쓰거나 읽기 위해 스트림 형성이 필요 • 파일에 스트림 형성 방법 • 파일 포인터 이용 • 파일 포인터 • 파일을 가리키는 FILE 타입의 구조체 • FILE 포인터를 이용한 파일 입출력 단계 • 1. 파일 포인터 선언 • FILE *fp; // fp는 파일 포인터 변수 • 2. 파일 포인터를 이용해 파일 열기 • fp = fopen(…); // 파일 오픈 후 그 파일에 대한 포인터 반환 • 3. 파일에 대한 입/출력 처리 • 파일 포인터 fp을 이용한 파일 입/출력 처리 • 4. 파일 닫기 • fclose(fp); // 사용 후 파일 포인터를 이용해 해당 파일 닫기
파일 입출력 함수 • 파일 조작 함수 • 파일 열기와 닫기 • 파일 스트림의 연결과 닫기 • fopen 함수 • fclose 함수 • 파일 검사 • 입출력 과정에서 발생된 에러 확인 • feof 함수 • ferror 함수 • 기타 파일 조작 함수 • 파일의 제거 및 이름 변경 • rename 함수 • remove 함수
파일 입출력 함수 • 파일 열기 (fopen 함수) • 함수의 원형 • FILE* fopen(char *filename, char*mode); • filename : 파일의 이름 • mode : 파일에 대한 접근 방법 • 반환 값 : 파일에 대한 포인터 (FILE *) • mode의 종류
파일 입출력 함수 • 파일 열기 (fopen 함수) • fopen의 정상적 수행 시 해당 파일의 포인터를 리턴 하지만 실패 시 NULL 값을 리턴 • 파일 오픈 과정에서 에러 확인 필요 • 사용 예> • 1 FILE *fp; • 2 ... • 3 fp = fopen("test.dat","r"); • 4 if(fp == NULL){ • 5 printf(" 파일오픈 실패 !“); • 6 exit(1); • 7 } • 파일 닫기 (fclose 함수) • 함수 원형 • int fclose(FILE *fp); • 오픈된 파일은 사용 후 반드시 닫아야 한다. • 열려진 파일 포인터를 인지를 화여 fclose 함수 호출
파일 입출력 함수 • 파일 입출력 과정 • 파일 입출력 과정은 버퍼 공간을 통해 이루어진다. • 시스템에 의해 자동적으로 버퍼의 공간에 저장된 데이터 파일로 출력 • 버퍼의 사용 목적 • 두 시스템간의 완충 작용 ( CPU와 주변장치 사이) • 두 시스템 사이의 처리 속도 문제 해결 • 필요에 따라 버퍼의 내용을 강제적으로 출력 하고자 할 경우에는 fflush 함수를 사용한다. • fflush 함수 • 버퍼의 내용을 강제적으로 파일에 작성하고 버퍼 비우는 역할 수행 • 함수의 원형 • int fflush(FILE *fp); • fp : 오픈된 파일의 포인터
파일 입출력 함수 • 파일 검사 함수 ( feof / ferror ) • feof 함수 • 파일의 끝에 정상적으로 도달 했는지의 여부 검사 • 함수의 원형 • int feof(FILE *fp); • 처리 결과 • fp가 파일의 끝에 도달할 경우 : 0이 아닌 값 • 그렇지 않을 경우 : 0 • ferror 함수 • 파일에 에러가 존재하는지의 여부 검사 • 함수의 원형 • int ferror(FILE *fp); • 처리 결과 • 파일 처리 과정 중 에러 발생 시 : 0이 아닌 값 • 그렇지 않을 경우 : 0
파일 입출력 함수 • 기타 파일 조작 함수 ( rename / remove ) • rename 함수 • 파일의 이름을 변경 • 함수의 원형 • int rename(char *oldname, char*newname); • oldname : 변경할 파일 이름 • newname : 새롭게 변경될 파일 이름 • remove 함수 • 해당 파일을 삭제 • 함수의 원형 • int remove(char*path); • path : 제거할 파일의 경로(이름) • 두 함수다 정상적 수행 후 결과 값을 0으로 그렇지 않을 경우 0이 아닌 값을 반환한다.
파일 입출력 함수 • 텍스트 파일 입/출력 함수 • 텍스트로 오픈된 파일의 조작함수 • 단일 문자 입출력 함수 • 함수의 종류 • int getc( FILE *stream); // 스트림으로부터 한 문자 입력 매크로 • int fgetc( FILE *stream); // 스트림으로부터 한 문자 입력 함수 • int putc( int c,FILE* stream); // 스트림에 한 문자 출력 매크로 • int fputc( int c,FILE* stream); // 스트림에 한 문자 출력 함수 • 처리 결과 • 정상적 수행 • 해당 문자를 반환하고 파일 포인터를 1중가 시킴 • 파일의 끝이거나 오류 발생 • EOF(-1) 값 반환
파일 입출력 함수 • 단일 문자 입출력 함수 사용 예 • 01 #include <stdio.h> • 02 #include <stdlib.h> // exit()함수 • 03 int main(){ • 04 FILE *rfp, *wfp; • 05 char c; • 06 rfp = fopen("test.txt","r"); • 07 if(rfp == NULL){ • 08 printf("test.txt 파일이 존재하지 않습니다.\n"); • 09 exit(1); • 10 } • 11 wfp = fopen("copy.txt","w"); • 12 if(wfp == NULL){ • 13 printf("copy.txt 파일생성이 오류 발생.\n"); • 14 exit(1); • 15 } • 16 while((c=fgetc(rfp)) != EOF){ • 17 fputc(c,wfp); • 18 } • 19 fclose(rfp); • 20 fclose(wfp); • 21 printf("text.txt 을 copy.txt파일로 복사 완료 되었습니다.\n"); • 22 return 0; • 24 }
파일 입출력 함수 • 문자열 입출력 함수 (fgets / fputs) • 텍스트 파일에 대한 문자열 입출력 제공 • fgets()함수 • 문자열 입력 함수 • 입력 스트림으로부터 n-1개의 문자를 읽어 들여 문자열 변수에 저장 • 문자열 입력 시 '\n'문자를 만나면 그때까지의 문자열을 저장 • 문자열 마지막에 '\0'문자 자동 포함 • 함수의 원형 • char *fgets( char* string, int n, FILE *stream); • string : 문자열 저장 버퍼 • n : 입력 최대 문자 수 • stream : 입력용 파일 포인터 • 반환 값 : 파일의 끝이나 에러 발생시 EOF • 정상적일 경우 저장된 문자열의 주소
파일 입출력 함수 • fgets() 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03 FILE *stream; • 04 char line[30]; • 05 if( (stream = fopen( "test.txt", "r" )) != NULL ){ • 06 while( fgets(line, 30, stream ) != NULL){ • 07 printf( "line = : [%s]\n", line); • 08 } • 09 fclose( stream ); • 10 } • 11 } • 입/출력 결과 실행 화면 test.txt 파일
파일 입출력 함수 • fputs 함수 • 문자열을 파일에 작성하기 위해 사용 • 문자열을 파일로 출력할 때 문자열의 맨 마지막에 존재하는 '\0' (NULL)문자는 출력 되지 않는다. • 함수의 원형 • int fputs( char *string, FILE *stream); • string : 출력할 문자열 • stream : 출력 대상 파일 포인터 • 반환 값 : 에러 발생시 EOF 발생 • 정상적인 출력 시 음수가 아닌 값을 반환
파일 입출력 함수 • fputs()함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03 FILE *stream; • 04 static char string[] = "Binary Files\nText Files"; • 05 if( (stream = fopen( "file.txt", "w" )) != NULL ){ • 06 fputs(string,stream); • 07 } • 08 fclose( stream ); • 09 } • 출력 결과 : ______________________ • ______________________ Binary Files Text Files
파일 입출력 함수 • 형식을 갖춘 파일 입출력 ( fprintf / fscanf ) • fprintf() 함수 • 형식을 포함하여 파일에 텍스트 문자열 작성 • printf() 함수와 비슷하지만 출력 위치가 파일이다. • 함수 원형 • int fprintf( FILE* stream, char*format [, argument ]...); • stream : 출력 파일 포인터 • format : 형식 지정 문자을 포함한 출력 문자열 • argument : 인수 리스트 • 반환 값 : 정상적인 수행 시 출력한 바이트 수를 리턴 • 오류 발생 시 음수 값 리턴
파일 입출력 함수 • fscanf() 함수 • 형식을 포함하여 텍스트 파일로부터 값 읽기 • scanf와 동일하게 사용되며 표준 입력 장치가 아닌 파일로부터 입력 • 표준 입력 장치의 파일의 끝 ( CTRL + Z ) • 함수의 원형 • int fscanf( FILE *stream, char *format [, argument ]... ); • stream : 입력 파일 포인터 • format : 입력 형식 제어 문자열 • argument : 인수 리스트 • 반환 값 : 정상적인 수행 시 인수의 개수를 반환 • 파일의 끝이나 에러 발생시 EOF 반환 • 이 두 함수에서 입력 파일 포인터를 stdin(표준 입력)으로 출력 파일 포인터를 stdout(표준 출력)으로 지정 시 scanf()와 printf()함수와 동일한 효과 발생
파일 입출력 함수 • 형식을 갖춘 파일 입출력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03 FILE *in,*out; • 04 int ivalue = 128, i; • 05 float fvalue = 2.35f, f; • 06 char str[] = "textfile", s[80]; • 07 // 파일 쓰기 • 08 out = fopen( "file.txt", "w" ); • 09 fprintf(out, "%d %f %s", ivalue, fvalue, str ); • 10 fclose(out); • 11 // 파일 읽기 • 12 in = fopen("file.txt","r"); • 13 if(in != NULL){ • 14 fscanf(in,"%d %f %s",&i,&f,s); • 15 fprintf(stdout,"int = %d , double = %f \n", i,f); • 16 printf("str = %s \n",s); • 17 fclose(in); • 18 } • 19 }
파일 입출력 함수 • 이진 파일 입/출력 함수 (fread / fwrite) • 문자 변환 없이 이진 파일의 입/출력 함수 • fread 함수 • 이진데이터의 입력 함수 • 함수의 원형 • size_t fread(void *buffer,size_t size,size_t count,FILE *stream ); • buffer : 저장할 데이터 위치 • size : 읽을 데이터의 크기 • count : 읽을 데이터의 개수 • stream : 읽을 파일 포인터 • 반환 값 : 정상적일 경우 읽은 데이터의 개수 • 파일의 끝이나 오류 발생시 실제 읽은 데이터의 개수로 • count 값보다 작은 값 반환
파일 입출력 함수 • fwrite 함수 • 이진 파일의 출력 함수 • 함수의 원형 • size_t fwrite(void *buffer,size_t size,size_t count,FILE *stream ); • buffer : 저장 대상 데이터 위치 • size : 작성할 데이터의 크기 • count : 작성할 데이터의 개수 • stream : 작성할 파일 포인터 • 반환 값 : 실제 저장된 데이터의 개수 • 오류 발생시 count 값보다 작은 값 반환
파일 입출력 함수 01 #include <stdio.h> 02 void main(){ 03 FILE *in, *out; 04 static int ivalue[] = {100,200,300}; 05 int iresult[3], i, cnt; 06 //쓰기용 이진 파일 열기 07 out = fopen("file.bin","wb"); 08 if(out==NULL){ 09 printf("file.bin 파일 열기 실패 !"); 10 return; 11 } 12 // 값 저장 13 cnt = fwrite(ivalue,sizeof(int),3,out); 14 if(cnt != 3) { 15 printf("ivalue 쓰기 실패 !\n"); 16 fclose(out); 17 return; 18 } 19 fclose(out); 20 //읽기용 이진 파일 열기 21 in = fopen("file.bin","rb"); 22 if(in==NULL){ 23 printf("file.bin 파일 열기 실패 !\n"); 24 return; 25 } • fread와 fwrite 함수 사용 예 26 // 정수 값 읽기 27 i=0; 28 do{ 29 cnt=fread(&iresult[i],sizeof(int),1,in); 30 i++; 31 }while(cnt == 1); 32 if(ferror(in)){ 33 printf("파일 읽기 에러 !\n"); 34 fclose(in); 35 return; 36 } 37 if(feof(in)){ 38 printf(" 파일읽기 완료 !\n"); 39 printf(" 결과 데이터 : "); 40 for(i=0; i<3;i++){ 41 printf("%5d",iresult[i]); 42 } 43 printf("\n"); 44 } 45 fclose(in); 46 }
파일 입출력 함수 • 임의 파일 접근 함수 (fseek, ftell, rewind) • 일반적인 파일 입출력 • 순차적 접근 방식 • 순차적으로 값을 읽고 자동적으로 파일 포인터 증가 방식 • 임의 접근 방식 • 읽고자 하는 위치로 파일 포인터 이동 • 임의 파일 접근 함수의 종류 • fseek • ftell • rewind
파일 입출력 함수 • fseek 함수 • 파일 포인터를 원하는 위치로 이동 시키는 함수 • 함수의 원형 • int fseek( FILE *stream, long offset, int origin ); • stream : 파일 포인터 • offset : 지정된 시작 위치에서부터 떨어진 바이트의 수 • origin : 시작 위치 • 반환 값 : 정상적인 수행 후 파일 포인터 해당 위치로 이동, • 결과 값 0반환 • 실패 시 0이 아닌 다른 값 반환 • 시작 위치(origin)의 종류
파일 입출력 함수 • fseek 함수 사용 예 • fseek(stream, 100L, SEEK_SET); • 파일의 시작 위치에서 100바이트 떨어진 위치로 파일 포인터 이동 • fseek(stream, 30L, SEEK_CUR); • 파일포인터의 현재 위치에서 30바이트 증가된 위치로 파일 포인터 이동 • fseek(stream, -20L, SEEK_END); • 파일의 끝 위치에서 20바이트 감소된 위치로 파일 포인터 이동 • ftell 함수 • 현재의 파일 포인터 위치 반환 함수 • 함수의 원형 • long ftell( FILE *stream); • stream : 파일 포인터 • 반환 값 : 정상적으로 수행 시 파일 포인터의 현재 위치 반환 • 실패 시 -1값을 반환 • rewind 함수 • 파일 포인터의 위치를 처음으로 이동 • 함수의 원형 • void rewind( FILE *stream); • stream : 파일 포인터 • 반환 값 : 없음 (파일 포인터의 위치를 처음으로 이동)
파일 입출력 함수 • fseek, ftell 그리고 rewind 함수 사용 예 01 #include <stdio.h> 02 void main(){ 03 FILE *in; 04 int result1,result2, seek; 05 //읽기용 이진 파일 열기 06 in = fopen("file.bin","rb"); 07 if(in==NULL){ 08 printf("file.bin 파일 열기 실패 !\n"); 09 return; 10 } 11 // 정수 값 읽기 12 seek = fseek(in,-(sizeof(int)),SEEK_END); 13 if(seek == 0){ // 정상적인 이동 14 printf("locattion after seek : %d \n", ftell(in)); 15 fread(&result1,sizeof(int),1,in); 16 printf("feek = %d\n",result1); 17 rewind(in); 18 printf("location after rewind : %d \n", ftell(in)); 19 fread(&result2,sizeof(int),1,in); 20 printf("rewind = %d\n",result2); 21 } 22 fclose(in); 23 }
텍스트 파일 활용 실습시간 – 1 교시
텍스트 파일 활용 • 학습개요 • 예제를 통한 텍스트 파일 관련 함수를 이용한다. • 간단한 텍스트 문서 편집기를 만든다. • 문자 조작 함수를 사용한다.
텍스트 파일 활용 • 텍스트 편집기 • 문제 정의 • 텍스트 편집기는 다양한 분야에서 활용되고 있다. 이러한 텍스트 편집기로 동작 가능한 프로그램을 만들어 보자. 만들 텍스트 편집기의 기능은 새 파일 작성, 불러오기, 저장하기 기능과 라인단위의 수정 기능을 포함하고 있다. 새 파일 작성은 키보드로부터 문자열을 입력 받아 문자열 공간에 저장하고 이 내용을 새로운 파일로 작성한다. 불러오기는 특정 파일을 읽어 화면에 출력시킨다. 또한 수정 기능은 라인 단위의 수정 기능만을 제공한다. 이러한 내용을 만족하는 텍스트 편집기를 작성 하시오. • 입/출력 조건 • 입력 조건 • 1. 작업 선택(1: 새파일, 2: 열기, 3: 수정 , 4: 종료) • 2. 새 파일 선택 시 문자열 • 입력 문자열 입력 종료는 [CTRL + Z] 입력 - [EOF 의미] • 입력 종료 시 저장 여부 확인 • 3. 불러오기 선택 시 파일의 이름 입력 • 4. 수정하기 선택 시 수정할 파일 이름 입력 • 수정을 위해 라인과 문자열 입력 • 수정 후 저장 여부 확인 • 6. 텍스트로 저장할 문자열의 크기는 1024 바이트로 한정한다.
텍스트 파일 활용 • 입/출력 조건 • 출력 조건 • 1. 불러오기 선택 시 해당 파일의 내용을 화면에 출력 • 2. 수정하기 선택 시 먼저 선택된 파일을 라인단위로 출력 • 수정 여부에 대한 메시지 출력 • 관련 함수 및 식 • 1.텍스트 기반 파일 관련 함수 (<stdio.h>) • fopen(), fclose() // 파일 열기와 닫기 • gets(), puts() // 표준 입출력을 통한 문자열 읽기와 쓰기 • getchar() // 표준 입력으로부터 한 문자 입력 • fputs(), fgets() // 파일에 문자열 읽기와 쓰기 • 2.문자열 조작함수(<string.h>) • strcat() // 문자열 결합 • 3.기타 함수 • tolower() // 한 문자를 소문자로 <ctype.h> • fflush() // 버퍼비우기 <stdio.h> • system("cls") // 화면 클리어 <windows.h>
텍스트 파일 활용 • 알고리즘 (또는 플로우 차트) • 1) 작업 선택(1:새파일 2: 열기 3: 수정 4: 종료) • 1.1 새파일 작업 선택 시 • 1.1.1 <CTRL>+Z 값을 만날 때 까지 문자열을 입력 받는다. • 1.1.2 입력 문자열 저장 • 1.1.2.1 저장할 이름 입력 • 1.1.2.1 내용 저장 • 1.2 열기 선택 시 • 1.2.1 열기를 원하는 파일 이름 선택 • 1.2.1 화면에 라인단위로 출력 • 1.3 수정 선택 시 • 1.3.1 수정 파일에 대한 내용을 화면에 출력 • 1.3.2 수정을 위한 라인 번호와 문자열 입력 • 1.3.2 파일에 수정 결과 반영 • 2) 종료를 선택하기 전까지 1)을 계속해서 반복한다.
텍스트 파일 활용 • 프로그램 구조체차트
텍스트 파일 활용 • 프로그램 작성 • 1 단계 • 349페이지의 프로그램을 위의 분석된 내용을 토대로 작성한 후 editor.c 파일로 저장하자. ①. getchar() ②. getchar() ③. gets(line) != NULL ④. strcat(pb,snum) ⑤. fp = fopen(fname,"w"); ⑥. strcat(bp,str); ⑦. strcat(bp,"\n"); ⑧. strcat(bp,line)
텍스트 파일 활용 • 2 단계 • 다음 입력 조건에 대한 결과를 작성하여 보자 선택 1 결과 : 선택 2 결과 : 선택 3 결과 : 선택 4 결과 :