Быстрый способ сортировки содержимого файла в java по алфавиту - PullRequest
2 голосов
/ 16 августа 2010

Может ли кто-нибудь порекомендовать быстрый способ сортировки содержимого текстового файла по первому количеству символов X в каждой строке?Например, если у меня в текстовом файле есть следующий текст

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

. Затем каждый из файлов отсортирован по своему содержанию (нет четкого представления о том, насколько просто он разделенв алфавитном порядке)

Затем, когда дело доходит до чтения данных, я знаю, что если я хочу найти строку, начинающуюся с A, тогда я открываю A.txt При вставке новой строки применяется то же самое, и я простодобавить в конец файла.Позже, после вставки, когда есть время, я могу вызвать мою программу сортировки, чтобы изменить порядок файлов, к которым были добавлены файлы.

Я понимаю, что в этом есть несколько недостатков, например, например.не будет четного числа строк, начинающихся с определенной буквы, поэтому некоторые файлы могут быть больше, чем другие и т. д.

Что опять же, почему мне нужно второе мнение для предложений о том, как подойти к этому?Текущая программа написана на Java, но для примера можно было бы использовать любой язык программирования ... Я перенесу то, что мне нужно.

(Если кому-то интересно, что я намеренно не пытаюсь создать себе головную боль, храня информацию таким образом, я унаследовал небольшую болезненную программу, которая хранит данные в файлах вместо использования какой-либо базы данных) Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Вы также можете просто вызвать команду DOS "sort" для сортировки файла.Это быстро и не требует программирования с вашей стороны.

В поле DOS введите help sort|more для синтаксиса и опций сортировки.

1 голос
/ 16 августа 2010

500 000 не должно быть так много, чтобы сортировать. Читайте все это в памяти, а затем сортируйте его, используя стандартные встроенные функции. Если вы действительно обнаружите, что они слишком медленные, то переходите к чему-то более сложному. 500 000 строк x около 60 байтов на строку все равно в итоге составляют 30 мегабайт.

0 голосов
/ 16 августа 2010

Другой вариант - прочитать файл и поместить его в облегченную базу данных (например, hsqldb в режиме файла )

Затем отсортировать данные и записать их обратно в файл.файл.(Или просто перенести в программу, поэтому она использует БД)

...