7. 레코드 구조

❗❗ 레코드 구조

⭕ 방법 1 : 고정 길이 레코드

  • 각 레코드가 같은 수의 바이트로 구성
  • 필드 크기나 수를 반드시 고정하는 것은 아니다.
  • 가변길이 필드를 위한 컨테이너로 사용

⭕ 방법 2 : 고정 갯수 필드

  • 각 레코드가 같은 수의 필드로 구성
  • 🔽 6개의 필드가 하나의 레코드 형성

⭕ 방법 3 : 길이 지시자

  • 각 레코드는 길이 지시자를 지님
  • 가변길이 레코드 처리에 널리 쓰임

⭕ 방법 4 : 주소 인덱스 사용

  • 레코드의 시작주소 ( 바이트 오프셋: offset)를 사용

⭕ 방법 5 : 구분자(delimiter) 사용

  • 각 레코드의 끝에 구분자를 놓음
  • 🔽 '#'를 구분자로 사용

❗❗ 레코드 구조 비교

1. 검색 성능이 우수한 레코드 구조

✅ 방법 1 : 고정 길이 레코드

2. 저장 공간 사용이 우수한 레코드 구조

✅ 방법 3 : 길이 지시자

3. 가변 길이 레코드 구조에 적합

✅ 방법 4 : 주소 인덱스 사용

❗❗ 필드와 레코드 구성

  1. 길이지시자를 사용하는 레코드 구조 (방법3)
  • 파일에 가변길이 레코드 구현
    - 모든 레코드의 시작부분에 길이 지시자를 넣는다면, 파일에 레코드를 기록하기 전에 각 레코드의 필드 길이의 합을 알아야만 함.
    • 출력하기 전에 레코드의 전체 내용을 버퍼에 저장할 필요가 있음
  • 파일에 가변길이 레코드 기록하기 : 방법 3- 길이지시자

int WritePerson (ostream & stream, Person &p)
{	
	// 버퍼 생성 
	char buffer[MaxBuffeSize];
	
	// 각각의 필드에 구분자 "|"를 덧붙여 버퍼에 쓰기 
	strcpy(buffer,p.LastName); strcat(buffer,"|");
	strcpy(buffer,p.FirstName); strcat(buffer,"|");
	strcpy(buffer,p.Address); strcat(buffer,"|");
	strcpy(buffer,p.City); strcat(buffer,"|");
	strcpy(buffer,p.State); strcat(buffer,"|");
	strcpy(buffer,p.ZipCode); strcat(buffer,"|");

	// 버퍼에 기록된 레코드의 길이를 구하여 파일에 써넣기 
	short length = strlen(buffer);
	stream.write(&length,sizeof(length));
	
	// 버퍼에 기록된 레코드 내용을 파일에 써 넣기 
	stream.write(&buffer,length);	
}
  • ❗❗파일로부터 다양한 길이 레코드 판독 : 방법3-길이지시자

좋은 웹페이지 즐겨찾기