2010-08-16 5 views
2

각 줄의 첫 번째 X 문자를 기반으로 텍스트 파일의 내용을 빠르게 분류 할 것을 권장하는 사람이 있습니까? 알파벳순으로 Java에서 파일의 내용을 알파벳 순으로 정렬하는 방법

Adrian Graham some more text here 

John Adams  some more text here 

텍스트

다음과 같은 예를 들어 내가 텍스트 파일에있는 경우는 그 다음 또 다른 기록은 예를 들면 위해 삽입 할 필요가있다.

Bob Something some more text here 

나는 정렬 된 파일을 유지할 필요가 있지만, 이것은 오히려 큰 파일이며 차라리 한 번에 메모리에 완전히로드되지 것입니다. 큰 것은 약 500 000 라인을 의미하므로 아마도 엄청나게 크지 않을 것입니다.

나는 주위를 둘러 보았고 http://www.codeodor.com/index.cfm/2007/5/14/Re-Sorting-really-BIG-files---the-Java-source-code/1208 을 찾았습니다. 누군가 다른 방법을 제안 할 수 있는지 알고 싶었습니까? 두 번째 의견을 내기 위해서? 내가 읽기 전에 위의 링크 된 문서

내 초기 생각을했다 : 선은 "A"로 시작하는 경우

는 Z

에 예를 들어 A에 대한 여러 파일로

분할을 파일 읽기 다음은 다음 그 내용을 분류 (명확한 생각하는 방법을 아직 떨어져 알파벳 순서에서)

이 없습니다

파일의 각 a.txt이

라는 파일에 기록됩니다 0

그럼 데이터 읽기에 관해서라면, 내가 A로 시작하는 줄을 찾고 싶다면 A.txt를 엽니 다. 새 줄을 삽입 할 때 똑같은 것이 적용되고 파일의 끝에 추가됩니다. . 나중에 삽입이 끝나면 내 정렬 프로그램을 호출하여 추가 된 파일을 다시 정렬 할 수 있습니다.

예를 들어 이와 같은 몇 가지 결함이 있다는 것을 알고 있습니다. 특정 파일로 시작하는 줄 수는 짝수가 아니기 때문에 일부 파일은 다른 파일보다 클 수 있습니다.

다시 접근해야하는 이유에 대한 두 번째 의견이 필요한 이유는 무엇입니까? 현재 프로그램은 java에 있지만 어떤 프로그래밍 언어도이를 달성 할 수있는 예제로 사용될 수 있습니다 ... 내가 필요한 것을 포팅 할 것입니다.

미리

에 감사 (사람이 내가 의도적으로 이런 식으로 정보를 저장하여 자신에게 두통을 제공하기 위해 노력하고 있지 않다 궁금하다면, 내가 대신 데이터베이스의 어떤 종류를 사용하여 파일에 데이터를 저장하는 고통스러운 작은 프로그램을 상속)
+0

파일을 열어 본 적이 있다면 왜 데이터베이스에 저장하지 않는 것입니까? –

+0

내가 3 항아리, 주 프로그램, 일부 util 물건과 파일 저장 및 검색을 처리하는 세 번째 항아리가 있기 때문에 나는 주 프로그램의 소스 만 갖고있다 ... 주 항아리와 유틸리티 항아리 모두 세 번째 항과 상호 작용한다 항아리는 내가 상속 할 수 있고 여러 가지 방법이 무작위로 읽히고 덮어 쓸 수 있다는 것을 의미하는 jar입니다. 아직 프로그램에서 발견 했으므로 파일을 제거하는 것이 더 어렵습니다. db를 연결하십시오. 그것의 가난하게 작성된 부드럽고 명백한 그들은 다시 그것을 개선하기 위해 다시 작업 할 의도가 없었습니다. ... – zcourts

+0

기본적으로 나는 피하려고 노력하고있는 거대한 재 작성없이 단순히 db를 추가하는 방법을 보지 못합니다. – zcourts

답변

2

DOS 정렬 명령을 호출하여 파일을 정렬 할 수도 있습니다. 그것은 신속하고 사용자 옆에 프로그래밍이 필요하지 않습니다.

DOS 상자에 정렬 구문 및 옵션에 대해 help sort|more을 입력하십시오.

+0

좋은 트릭이 될 것이지만 우분투 바탕 화면에서 실행 ... 내 dev에 환경은 Windows가 있습니다 :) – zcourts

+0

@ robinsonc494, 나는 우분투에 익숙하지 않지만 비슷한 명령을 가지고 있지 않습니까? – BoltBait

+0

아마, 나는 그것을 들여다 볼께, 고마워. 나는 종종 데스크톱 환경으로 리눅스를 사용하지 않는다. 그래서 저는 전문가도 아니지만 잠시 후에 확인해보고 그런 일이 있는지 알아 보겠습니다. 다시 한 번 감사드립니다 – zcourts

1

500,000으로 정렬하면 안됩니다. 전체 내용을 메모리로 읽어 들인 다음 표준 내장 함수를 사용하여 정렬하십시오. 나는 당신이 정말로 이것들이 너무 느리다는 것을 알게되고, 그런 다음 좀 더 복잡한 것으로 넘어 간다. 500,000 라인 x 라인 당 약 60 바이트는 여전히 30 메가가됩니다.

+0

그건 사실이지만 파일이 커지면서 미래의 크기를 고려하고 싶었습니다. – zcourts

+0

아마도 존재하지 않는 문제를 해결하기위한 조숙 한 최적화 일 것입니다. 응용 프로그램을 모니터링하는 것이 좋습니다. 속도 및/또는 메모리 사용량이 문제가 될 때까지 기다렸다가이를 수정하십시오. – Kibbee

+0

포인트 조기 최적화에 찍은하지만 사실은 여전히 ​​적어도 이미 존재하는 데이터를 정렬 할 필요가 남아있다 – zcourts

0

또 다른 옵션은 파일을 읽고

그런 다음 데이터가 정리 될 (예를 hsqldb in file mode에 대한) 경량 DB에 넣고, 다시 파일에 기록 할 수 있습니다. (또는 단순히 프로그램으로 마이그레이션하여 db를 사용합니다.)

+0

hsqldb와의 마지막 만남이 너무 즐겁지는 않았지만이 사진을 줄 수도 있습니다. – zcourts

관련 문제