파일처리

파처 ch4) Fundamental File Structure Concepts

chris3471 2025. 4. 10. 16:38
728x90
반응형

사람 정보 저장

 

문제점

- 사람 record 간에 구별이 되어있지 않음

- record 안에서 field에 대한 구별이 되어있지 않음

 

 

File Organization

- field : 논리적인 의미를 갖는 가장 작은 단위

    - Fixed-length fields

    - Variable-length fields

         (1) Begin each field with a length indicator

         (2) Separate the fields with delimiters

         (3) Use  "keyword = value" expression to identify fields

 

- record : field의 집합 (파일을 더 높은 수준의 조직체계로 볼 때 사용)

    - Fixed-length records

    - Variable-length records

         (1) Make records a predictable number of fields

         (2) Begin each record with a length indicator

         (3) Use an index to keep track of addresses

         (4) Place a delimiter at the end of each record

Field Structures : Fix the Lengh of Fields

- 고정된 길이의 fields를 설정해놓기

  ex) 학번 : 10B

        이름 : 20B

         학년 : 1B

 

- 각 레코드에 대해 동일한 학번B, 이름B, 학년B 를 할당해줌(공간 할당)

=> 공간 낭비라는 단점이 있음 (가변 길이 방식으로 저장하면 단점을 해결 가능)

 

Variable-length fields

1. Begin each field with a length indicator

 - field 앞에 그 필드의 크기를 저장하는 방식

 

2. Separate the fields withdelimiters

 - 다음 필드를 만나기 전에 | 를 두는 방식

 

3. Use a "keyword = value" expression to identify fields

 - 키워드 = 값 형식으로 저장함

 

장점

 - self-describing : 필드 자체의 정보를 제공

 

문제점

 - 많은 공간을 낭비 (50% 이상의 파일 공간이 keyword를 위해 사용됌)

 

Record Structures : Fix the Lengh of Fields

- 각각 레코드들의 공간을 동일하게 만듦

fixed-length ❘ variable-length fields 방식

 

 

Record Structures : Make Records a Predictable Number of Fields

 - 고정된 바이트 수로 레코드를 확인하는 것이 아니라 고정된 수의 필드의 수로 확인을 하는 방식

 

 

 

Record Structures : Begin Each Record with a Length Indicator

- 각 레코드를 저장할 때 길어 정보를 넣어줌

 

- 레코드의 길이 정보를 가져와서 읽어줌

 -> 랜덤하게 읽을 때 문제가 발생(처음부터 다 읽어줘야 하기 때문에 시간 낭비)

 

 

Record Structures : Use an Index to Keep Track of Addresses

- 인덱스 파일을 따로 만들어서 해당하는 바이트의 주소를 저장해놓음

 

 

Record Structures : Place a Delimiter at the End of Each Record

- 레코드 뒤에 Delimiter를 넣어주는 방식 (아래 예시에서는 #이 delimiter)

 

 

 

 

Example : A Record Structure Using a Length Indicator

- record organization 방법 선택은 데이터의 특성과 해당 데이터를 어떻게 활용하는지에 따라 달라짐

 

ex)

1. 파일에 가변 길이 레코드를 쓰는 방법

  - ex) 5|apple, 7|bananas 처럼 길이 + 데이터 구조

2. 레코드 길이를 어떻게 표현할 것인가?

  - 고정된 바이트로 길이 저장? 구분자 사용?

3. 파일에서 가변 길이 레코드를 읽는 방법

  -먼저 길이를 읽고, 해당 길이만큼 데이터를 읽음

 

문제 : 파일에 어떻게 쓸 것인가 ?

1. 필드 길이 총합 계산 필요

  -> 해결책 : 버퍼링(buffering) 

                   먼저 메모리 버퍼에 모든 필드를 담은 뒤, 총 길이를 계산하여 파일에 씀

 

2. 길이 필드를 어떤 형식으로 파일에 쓸까?

  -> 해결책 : 이진수(binary integer) : 공간 절약, 빠름

                    ASCII 문자 : 사람이 읽기 쉬움, 이식성이 높음

 

Mixing Numbers and Characters

 

(a) ASCII 형식 저장

   - 사람이 읽을 수 있음

  - 공백 없이 이어지면 식별 어려움

  - 공간 낭비 : 숫자 1개에 문자 2개 사용

(B) Binary 형식 저장 (2바이트 정수)

  - 공간 효율적 : 숫자 하나당 고정 2바이트

  - 사람이 읽기 어려움

  - 바이너리 파일 포맷, 데이터베이스 내부 처리에 자주 사용됨

 

Use of a File Dump

 

 

 

fwrite는 바이너리로 데이터를 저장

fprintf는 ASCII 코드 값을 저장

 

 

 

728x90
반응형