문제

나는 텍스트 파일 ASCII/이진에서 색인을 만드는 클래스를 프로그래밍하는 데 바쁘다. 내 문제는 시작하는 방법을 실제로 모른다는 것입니다. 나는 이미 약간의 시도를했지만 실제로는 나를 위해 잘 작동하지 않았습니다. MFT를 통해 파일의 주소를 찾을 필요가 없습니다. 인덱스 파일의 키를 검색하고 텍스트 파일로 표시되는 주소로 파일을로드하고 물건을 훨씬 더 빨리 찾는 것입니다.

인덱스 파일은 다음과 같이 구축해야합니다.

KEY        ADDRESS  
  1        0xABCDEF    
  2        0xFEDCBA    
  .           .  
  .           .  

다음 예제 값이있는 텍스트 파일이 있습니다.

1, 8752 FW,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++, 
******************************************************************************, 
------------------------------------------------------------------------------;

나는 이것이 내 질문을 조금 더 잘 설명하기를 바랍니다. 감사!

도움이 되었습니까?

해결책

모든 수업이 필요한 모든 수업은 파일의 주요 위치에 다양한 포인터 또는 파일 시작 오프셋을 저장하는 것 같습니다.

실제로 주요 위치가 나타내는 것에 달려 있습니다.

공개 방법을 사용하여 수업을 통해 파일에 액세스하는 것이 좋습니다. 그런 다음 데이터가 작성된 상태에서 주요 위치에 더 쉽게 묶을 수 있습니다.

예를 들어, 주요 위치는 파일에 작성된 각 새 데이터 블록이 시작될 수 있습니다. 예를 들어 첫 번째 블록 1000 바이트, 키 위치 0; 두 번째 블록 2500 바이트, 키 위치 1000; 세 번째 블록 550 바이트; 핵심 위치 3500; 다음 블록은 0이 첫 번째 바이트라고 가정하면 4050입니다.

키 값을 가변 길이 배열에 저장 한 다음 데이터 블록의 시작점을 쉽게 검색 할 수 있습니다.

키 포인트가 어떤 핵심 문자로 표시되면 동일한 클래스를 사용할 수 있지만 키 값이 저장되는 곳에 저장을 약간 변경할 수 있습니다. 가장 간단한 방법은 키 문자가 위치 할 때까지 데이터를 단계별로 진행하여 확인 된 문자 수를 계산하는 것입니다. 그런 다음 카운트는 주요 위치를 생성하는 데 사용됩니다.

다른 팁

코드 스 니펫은 결국 당신이 갖고 싶은 기능만큼이나 아이디어가 아닙니다.

"색인"은 단지 사물이있는 곳을 "기억하는"것을 의미한다는 것을 인식하십시오. B-Tree, Red/Black Tree, BST 또는 접미사 트리/접미사 어레이와 같은 고급 구조를 사용하여 원하는 데이터 구조를 사용 하여이 작업을 수행 할 수 있습니다.

그러한 데이터 구조를 살펴 보는 것이 좋습니다.

편집하다:

새로운 정보를 사용하면 나만의 키/가치 조회를하는 것이 좋습니다. 키 배열을 만들고 값을 어떻게 든 연결하십시오. 이는 키와 값을 모두 포함하는 클래스 또는 구조물을 구축하거나 대신 값이있는 구조물 또는 클래스에 대한 키와 포인터를 포함하는 것을 의미 할 수 있습니다.

이 작업을 수행하면 키 어레이를 정렬하십시오. 이제 키에서 이진 검색을 수행하여 주어진 키에 적합한 값을 찾을 수 있습니다.

비슷한 방식으로 해시 테이블을 만들 수 있습니다. 앞에서 언급 한 것처럼 BST 또는 유사한 구조를 구축 할 수 있습니다.

나는 아직도 그 질문을 실제로 이해하지 못하지만 (당신의 질문에 대한 작업에 대한 작업)는 알고리즘에 알 수있는 한 다음과 같습니다.

  1. 파일을 선형으로 스캔하면 첫 번째 쉼표까지의 첫 번째 값 ( ',')은 아마도 열쇠 일 것입니다. 다른 모든 키는 a ';' 다음 '까지', '(여기서 라인 브레이크를 건너 뛰어야 할 수도 있음). 숙제 과제 인 경우 Scanf () 또는 키를 읽으려면 사용하십시오.
  2. 인덱스 파일에 찾은 키 및 바이트 위치 인쇄

Afaiui 그게 알고리즘입니다. 여기서 문제가 실제로 보이지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top