C++ Espresso 제13장 입출력과 파일처리.

Slides:



Advertisements
Similar presentations
3. 자료형. 담당교수 : 이 성 우 C++ 프로그래밍 상수와 변수 (3) 1. 변수 (variable)  프로그램 수행 도중에 자료  변수를 위해 은 변하지 않음  선언 시에 반드시 그. ※ 저장 정보의 구성 ① 정보의 종류 ② 저장 값 ③ 저장 위치 int Num.
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Vision System Lab, Sang-Hun Han
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
-Part3- 제3장 콘솔 입출력과 파일 입출력.
강좌명 : C++프로그래밍 (C++ Programming)
01 화일의 기본 개념 02 화일 저장장치 03 화일 입출력 제어 04 순차화일 05 화일의 정렬 06 화일의 합병
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
C++ Espresso 제9장 다형성.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
제15장 STL과 람다식 STL의 개념을 이해하고 사용할 수 있다. 람다식을 이해하고 사용할 수 있다.
C++ Espresso 제6장 생성자와 소멸자.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제13장 파일처리 스트림의 개념을 이해한다. 객체 지향적인 방법을 사용하여 파일 입출력을 할 수 있다.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C ++ 프로그래밍 시작.
처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 11 장 파일 처리.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
Chapter 1 C++ 기초 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
Department of Computer Engineering
스택(Stack) 김진수
파일 입출력 12.
제 3 장 상수와 변수
프로그램과 데이터의 구조화 Organizing programs and data
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
조 병 규 Software Quality Lab. 한국교통대학교
루프와 카운트 Looping and counting
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
컴퓨터개론및실습
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
파일 입출력.
C-언어와 기반구조 정보보호학과 이정수 교수.
5. 논리적 자료표현 : 구조체.
nauten Compiler – Report Ver.3 Mini-C (주간)
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
새로운 타입 정의하기 Defining new types
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
Presentation transcript:

C++ Espresso 제13장 입출력과 파일처리

이번 장에서 학습할 내용 입출력과 파일처리에 대하여 살펴봅시다. 파일 입출력 텍스트 파일과 이진 파일 순차 파일과 랜덤 파일

스트림(stream) 스트림(stream)은 “순서가 있는 데이터의 연속적인 흐름”이다. 스트림은 입출력을 물의 흐름처럼 간주하는 것이다.

입출력 관련 클래스들 ostream istream ifstream ofstream iostream fstream stringstream fstream istringstream ostringstream

파일 처리의 순서 파일을 다룰 때는 반드시 다음과 같은 순서를 지켜야 한다.

<<과 >>을 이용한 입출력   입력 ifstream is; is.open("score.txt"); int number; is >> number; 출력 ofstream os; os.open("result.txt"); os << number;

예제 #1 학생 데이터를 파일에 저장하고 읽어보자. int number; // 학번 char name[30]; // 이름 int score; // 성적

예제 #include <iostream> #include <fstream> // 파일 입출력을 하려면 헤더 파일을 포함하여야 한다. using namespace std;   int main() { ifstream is; is.open("score.txt"); if( !is ) { // ! 연산자 오버로딩 cerr << "파일 오픈에 실패하였습니다" << endl; exit( 1 ); } int number; //학번 char name[30]; // 이름 int score; // 성적 is >> number >> name >> score;

예제 score.txt result.txt ofstream os; os.open("result.txt"); os << number << " " << name << " " << score << endl;   is.close(); os.close(); return 0; } score.txt 20100001 홍길동 100 20100002 김유신 90 20100003 강감찬 80 result.txt 20100001 홍길동 100

멤버 함수 이용 입출력 #include <iostream> #include <fstream> // 파일 입출력을 하려면 헤더 파일을 포함하여야 한다. using namespace std;   int main() { ifstream is; is.open("score.txt"); if( !is ) { // ! 연산자 오버로딩 cerr << "파일 오픈에 실패하였습니다" << endl; exit( 1 ); } char c; is.get(c); // 하나의 문자를 읽는다. while(! is.eof() ) cout << c; is.get(c); is.close(); return 0;

멤버 함수 이용 입출력 파일 score.txt 20100001 홍길동 100 20100002 김유신 90 20100003 강감찬 80 실행 결과 20100001 홍길동 100 20100002 김유신 90 20100003 강감찬 80 계속하려면 아무 키나 누르십시오 . . .

키보드에서 받은 문자 저장 #include <iostream> #include <fstream> // 파일 입출력을 하려면 헤더 파일을 포함하여야 한다. using namespace std;   int main() { ofstream os; char c; os.open("test.txt"); while( cin.get(c) ) os.put(c); } os.close(); return 0;

키보드에서 받은 문자 저장 파일 test.txt This is a test. 실행 결과 This is a test. ^Z Press any key to continue

각줄에 번호를 붙이는 예제 #include <iostream> #include <fstream> using namespace std;   int main() { ifstream is; ofstream os; is.open("score.txt"); if( is.fail() ){ cerr << "파일 오픈 실패" << endl; exit(1); } os.open("result.txt"); if( os.fail() ){

각줄에 번호를 붙이는 예제 char c; int line_number=1; is.get(c); os << line_number << ": "; while(! is.eof() ) { os << c; if( c == '\n' ){ line_number++; } is.close(); os.close(); return 0;

각줄에 번호를 붙이는 예제 파일 score.txt 20100001 홍길동 100 20100002 김유신 90 20100003 강감찬 80 파일 result.txt 1: 20100001 홍길동 100 2: 20100002 김유신 90 3: 20100003 강감찬 80  

출력 형식 지정 cout.precision(3); // 소수점 이하 지리수를 3자리로 설정 cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.setf(ios::left); cout.setf(ios::left | ios::showpoint); cout.unsetf(ios::uppercase); // 설정 해제

중간 점검 문제 1. 스트림의 장점은 무엇인가? 2. 사용자로부터 입력을 받아서 무조건 파일에 저장하는 프로그램을 작성하라.

텍스트와 이진 파일

텍스트 파일(text file) 텍스트 파일은 사람이 읽을 수 있는 텍스트가 들어 있는 파일 (예) C 프로그램 소스 파일이나 메모장 파일 텍스트 파일은 아스키 코드를 이용하여 저장 텍스트 파일은 연속적인 라인들로 구성

이진 파일(binary file) 이진 파일은 사람이 읽을 수는 없으나 컴퓨터는 읽을 수 있는 파일 이진 데이터가 직접 저장되어 있는 파일 이진 파일은 텍스트 파일과는 달리 라인들로 분리되지 않는다. 모든 데이터들은 문자열로 변환되지 않고 입출력 이진 파일은 특정 프로그램에 의해서만 판독이 가능 (예) C 프로그램 실행 파일, 사운드 파일, 이미지 파일

텍스트와 이진 파일의 저장 방법 비교

이진 파일 입출력 ofstream os; os.open("test.dat", ofstream::binary); int x=5; os.write((char*)&x, sizeof(int));

예제 #include <iostream> #include <fstream> using namespace std;   int main() { int buffer[] = { 10, 20, 30, 40, 50 }; ofstream os; os.open("test.dat",ofstream::binary); if( os.fail() ) cout << "binary.txt 파일을 열 수 없습니다." << endl; exit(1); } os.write((char *)&buffer, sizeof(buffer)); os.close(); return 0;

실행 결과 파일 test.dat  

예제 int main() { struct Score { int number; char name[30]; int score; } grades[] = { {20100001, "홍길동", 100}, {20100002, "김유신", 90}, {20100003, "강감찬", 80} };   ofstream os; os.open("test.dat",ofstream::binary); if( os.fail() ) cout << "test.dat 파일을 열 수 없습니다." << endl; exit(1); } os.write((char *)&grades, sizeof(grades)); os.close(); return 0;

실행 결과 파일 test.dat    

중간 점검 문제 1. 정수 10은 텍스트 파일에서는 어떻게 저장되는가? 2. 정수 10은 이진 파일에서는 어떻게 저장되는가?

임의 접근 파일 순차 접근(sequential access) 방법: 데이터를 파일의 처음부터 순차적으로 읽거나 기록하는 방법 임의 접근(random access) 방법: 파일의 어느 위치에서든지 읽기와 쓰기가 가능한 방법

임의 접근 파일의 원리 파일 위치 표시자: 읽기와 쓰기 동작이 현재 어떤 위치에서 이루어지는 지를 나타낸다. 강제적으로 파일 위치 표시자를 이동시키면 임의 접근이 가능 파일 위치 표시자

임의 접근 관련 함수 seekg(long offset, seekdir way); is.seekg(ios::beg, 100);   is.seekg(ios::end, 0); is.seekg(ios::cur, -100);

예제 const int SIZE=1000; void init_table(int table[], int size);   int main() { int table[SIZE]; int data; long pos; // 배열을 초기화한다. init_table(table, SIZE); // 이진 파일을 쓰기 모드로 연다. ofstream os; os.open("test.dat",ofstream::binary); if( os.fail() ) cout << "test.dat 파일을 열 수 없습니다." << endl; exit(1); }

예제 // 배열을 이진 모드로 파일에 저장한다. os.write((char *)table, sizeof(table)); os.close();   // 이진 파일을 읽기 모드로 연다. ifstream is; is.open("test.dat",ofstream::binary); if( is.fail() ) { cout << "test.dat 파일을 열 수 없습니다." << endl; exit(1); }

예제 // 사용자가 선택한 위치의 정수를 파일로부터 읽는다. while(1) { cout <<"파일에서의 위치를 입력하십시요(0에서 999, 종료-1): "; cin >> pos; if( pos == -1 ) break; is.seekg(pos*sizeof(int), ios::beg); is.read((char *)&data, sizeof(int)); cout << pos << " 위치의 값은" << data << " 입니다." << endl; } is.close(); return 0; // 배열을 인덱스의 제곱으로 채운다. void init_table(int table[], int size) int i;   for(i = 0; i < size; i++) table[i] = i * i;

예제 파일에서의 위치를 입력하십시요(0에서 999, 종료 -1): 3 3 위치의 값은 9입니다. 파일에서의 위치를 입력하십시요(0에서 999, 종료 -1): 9 9 위치의 값은 81입니다. 파일에서의 위치를 입력하십시요(0에서 999, 종료 -1): -1

중간 점검 문제 1. 파일의 처음으로 파일 위치 표시자를 이동시키는 문장을 작성하라. 2. 파일의 끝으로 파일 위치 표시자를 이동시키는 문장을 작성하라.

Q & A