6. 필드(field)

김동웅·2021년 9월 29일
0

File_structrue In C,C++

목록 보기
6/11

1. 스트림 파일(Stream file)

  • 정보를 바이트(byte)의 스트림으로 표기
  • 필드란 파일에서 가장 작은 정보의 유닛

ex) Mary, Ames, 123, Maple .. 은 하나의 필드이다.

  • In C:
struct Person
{
	char last[11];
    char first[11];
    char address[16];
    char city[16];
    char state[3];
    char zip[10];
}
  • In C++ :

class Person
{
   public : 
    	char last[11];
   	char first[11];
        char address[16];
        char city[16];
   	char state[3];
    	char zip[10];
}

❗❗ 2. 필드 구조

어떻게 필드를 유지할 것인가 ?

⭕ 방법 1 : 고정 길이 필드

  • 필요한 최대 크기 배정 // 파일 크기가 커지고 낭비가심함
  • 필드길이가 비슷한 경우에는 유용

⭕ 방법 2 : 길이 지시자(length indicator)

  • 필드의 앞에 필드의 길이를 저장
  • 길이기반(length-based) 필드

⭕ 방법 3 : 구분자(delimiter)

  • 구분문자로 필드 식별
  • 구분자 : 필드 내에 포함되지 않는 특수문자 ( |: vetical bar, \ : shift)

⭕ 방법 4 : 키워드(key word)

  • 자체 기술적구조 : 파일 구성에 유용
  • 구분자와 결합하여 사용
  • 공간의 낭비가 있다.

비교

  • 가장 단순하고 빠른 방법 : ⭕ 방법 1 : 고정 길이 필드
  • 공간의 낭비가 적은 방법으로 널리 사용하는 방법 : ⭕ 방법 3 : 구분자(delimiter)

3. 필드의 스트림 판독

⭕ 방법 3 : 구분자(delimiter)

< Person 타입 p객체에 구분된 필드를 판독하기 위한 추출 연산자 >

  • base

class Person
{
   public : 
    	char last[11];
   	char first[11];
        char address[16];
        char city[16];
   	char state[3];
    	char zip[10];
}
  • 판독
// 파일로부터 구분자 '|'로 구분된 필드를 판독
istream & operation >> ( istream & stream, Person &p)
{
    char delim;
    stream.getline(p.LastName,30,'|');
    if(strlen(p.LastName) == 0 ) return stream;
    stream.getline(p.FirstName,30,'|');
    stream.getline(p.Address,30,'|');
    stream.getline(p.City,30,'|');
    stream.getline(p.State,15,'|');
    stream.getline(p.ZipCode,10,'|');
    return stream;
 }


0개의 댓글

관련 채용 정보