이번에는 이전 글(https://shyeon.tistory.com/13)에서 만든 레코드파일을 관리하는 simple index 파일을 생성하고 생성한 simple index파일을 활용하여 이진탐색 방식을 이용해 원하는 레코드의 정보를 불러오는 기능을 구현해 보았다.
simple index파일에서의 key 값으로는 14바이트짜리 id가 사용된다 그리고 원하는 주소에 접근하기 위해서 페이지번호와 페이지에서의 레코드 번호가 주소값으로 사용된다. 그렇기 때문에 뒤에 널문자를 제외한 13바이트의 id, 페이지 번호로 4바이트, 레코드 번호로 4바이트 총 21 바이트가 simple index 파일의 하나의 레코드를 구성한다. 레코드 파일을 하나 넘겨줄 경우 record.idx라는 이름의 simple index 파일이 생성된다. 이때 생성된 레코드는 id에 대해 오름차순으로 정렬된다. 이 id는 정수형으로 정렬되기 때문에 자리수가 클 수록 큰 수로 판단된다. 레코드파일은 다음과 같은 명령어로 실행된다.
$ a.out i records.dat records.idx
이렇게 두 번째 인자로 i를 줄 경우 records.dat의 레코드파일로부터 records.idx라는 이름의 index 파일을 생성한다.
만약 두 번째 인자로 b 옵션을 줄 경우 정렬된 index 파일로부터 원하는 키 값을 주었을 때 원하는 레코드의 정보를 출력한다. 실행할 경우 다음과 같이 나타나게 된다.
$ a.out b records.dat records.idx "9800001111111"
#reads:3
id=9800001111111
name=shyeon
age=24
addr=Seoul
phone=010-0000-0000
email=shyeon@shyeon.com
이렇게 records.idx에서 9800001111111이라는 키를 이진 탐색으로 찾는데 3번의 읽기를 했다는 의미로 #reads:3을 출력하고 records.idx에서 찾은 주소값으로 records.dat이라는 레코드파일에서 해당 레코드를 읽은 결과를 밑에 출력하게 된다. 만약 레코드가 존재하지 않는 경우 "no persons"를 출력한다.
'파일처리' 카테고리의 다른 글
가변길이 레코드 방식을 활용한 레코드 파일 관리 (0) | 2021.07.13 |
---|---|
파일에서의 레코드 삭제 방법과 관리(File Processing) (0) | 2021.06.25 |
파일 구조(File structure) : 고정길이 방식과 가변길이 방식(fixed length, variable length) (0) | 2021.06.25 |
Binary Search Tree(BST)와 B-Tree,B+Tree (0) | 2021.06.23 |
파일처리(File Processing)와 파일 구조(File Structure) (0) | 2021.06.23 |