약 200,000 개의 레코드가 포함 된 file.txt가 있습니다.바이너리 검색 하위 문자열을 사용하여 배열 문자열 검색
각 레코드의 형식은 123456-99-Text입니다. 123456은 고유 계정 번호이고, 99는 필요한 위치 코드이며 (01에서 99로 변경됨) 텍스트는 부적합합니다. 이 계좌 번호는 ac 단위 (111111, 111112, 111113 등)의 파일에서 줄 바꿈 순서로 정렬됩니다.
시각적 인 스튜디오 텍스트 상자와 검색 버튼을 만들어 누군가가 계정 번호를 검색하도록했습니다. 계좌 번호는 실제로는 11 자리이지만 처음 6 개 사항입니다. 이걸 문자열로 썼습니다. actnum = textbox1.text.substring(0,6)
if (x.contains(actnum))
다음에 string code = x.substring(8,2))
문을 사용하여 foreach (string x in file.readline('file.txt'))
을 작성했습니다.
프로그램은 정상적으로 작동하지만 누군가가 존재하지 않는 계정 번호 나 목록 맨 아래에있는 번호를 검색하면 프로그램이 잘 작동하기 때문에 프로그램은 10 초 동안 잠겨 " 번호를 찾을 수 없습니다 "else 문 또는 영원히 그 마지막 레코드를 찾을 수 있습니다.
내 질문 : 이진 검색에 대해 읽기
이 나는 많은 성공없이 하나를 시도하려고했습니다. 합법적 인 이진 검색처럼 작동하도록 배열이나 파일을 가져올 수 없습니다. textbox1에서 6 자리 actnum을 가져 와서 6 자리 계정 번호의 배열 부분 문자열과 비교 한 다음 해당 특정 줄에서 부분 문자열 99 코드를 가져 오는 방법이 있습니까?
바이너리 검색이 크게 도움이 될 것입니다! 필자는 555-555를 사용하여 레코드 파일의 상단 또는 하단과 비교 한 다음, 필요한 라인을 고칠 때까지 검색을 계속하고 전체 라인을 잡고 99 라인을 부분 출력합니다. 내가 가진 문제는 숫자와 텍스트가 모두 포함되어 있기 때문에 파일의 적절한 정수 변환을 얻는 것처럼 보이므로 적절하게 <,>, = 부호를 사용할 수 없습니다.
이 문제에 대한 도움을 주시면 대단히 감사하겠습니다. 현재 프로그램은 실제로 작동하지만 엄청나게 느립니다.
코드에 붙여 넣으십시오. 만약 당신이 그것을 잘못하면 그것을 고치기 위해 편집 할 것입니다. 짧게 빈 줄을 만든 다음 코드 블록을 4 칸 들여 쓰기합니다. –
파일을 메모리로로드하려고 시도했는데 가능하면 객체 표현을 만들지 않았습니까? – Brandon
@Brandon은 모든 것을 메모리에 집어 넣으려는 다소 큰 목록처럼 들리며 11 자리 번호로 제안 된 것처럼 더 커지면 OP에서 리소스가 부족할 수 있습니다. –