[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка большого файла со строками
Страницы: 1, 2, 3
sonicsonic1
Доброе время суток.
Имеем большой файл(4ГБ и более). Файл со строками может быть ОЧЕНЬ большого размера (в т.ч. 2-3-4+ Гб), т.е. он ТОЧНО не поместится в оперативную память. Важно: мы не знаем заранее, сколько памяти будет доступно PHP на машине, на которой будет выполняться наш скрипт. Результатом работы должен быть файл, содержащий строки исходного файла, отсортированные по алфавиту.

Подскажите в каком направлении двигаться и как вообще решаются такие задачи? Как я понял из условия,надо основной файл резать на под файлы и обрабатывать .т к мы ограничены операт. паматью. Сортировать их и потом уже как -то собирать обратно ??
Valick
Цитата
как вообще решаются такие задачи?

применяются базы данных


_____________
Стимулятор ~yoomoney - 41001303250491
vagrand
sonicsonic1
Цитата
содержащий строки исходного файла, отсортированные по алфавит


А как строки сортируются по алфавиту? По первой букве в строке?

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
sonicsonic1
строки сортироваться должны по алфавиту. строки содержат только буквы англ алфавита
Invis1ble
sonicsonic1
тестовое задание?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

sonicsonic1
Да rolleyes.gif
sergeiss
sonicsonic1, тебе уже ответили:
Цитата (Valick @ 1.02.2014 - 20:03)
применяются базы данных


А именно, грузишь данные в БД, делаешь выборку с сортировкой, записываешь опять в файл. Эта система будет работать с любым объемом файла и с любой оперативкой..

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Invis1ble
а я б сказал, что делать такого размера текстовые файлы как минимум недальновидно wink.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

sergeiss
Цитата (Invis1ble @ 2.02.2014 - 12:51)
а я б сказал, что делать такого размера текстовые файлы как минимум недальновидно

Это могут быть файлы, созданные какой-нибудь системой (конфигурация, статистика,....), а не самим программистом, который их обрабатывает. Так что умение работать с такими объемами инфы очень даже полезно.
Меня другое удивляет: человек учится на программиста, ему должны же были объяснить там, где он учится, как с этим работать, самые общие принципы?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
sonicsonic1
Ребята, конечно недальновидно)) Но задание дали такое + использовать БД нельзя. Только работа с файлом. Больше никаких версий решения ? sad.gif
Valick
sonicsonic1, ну если хочется извращений, то:
берем первую букву алфавита
выбираем все строки читая файл построчно в отдельный файл 1
и так далее по алфавиту 2 3 4 ...
потом если надо еще сортировать
берем файл 1
и делаем выборку по второму символу, точно так же разбивая на файлы 1.1 1.2 1.3 и тд
и в зависимости от глубины сортировки вот так и мазохируем 1.1.1 - 1.1.1.1 - 1.1.1.1.1

_____________
Стимулятор ~yoomoney - 41001303250491
sonicsonic1
ну 1 этап вроде ок. это получится это 26 больших+ 26 маленьких = 52 файла.
я не совсем понимаю зачем еще разбивать на подфайлы если можно сразу эти файлы сортировать каждый и будет же все правильно по итогу,не?
Valick
sonicsonic1, ну раз нам неизвестно значение памяти для РНР, то я вам показал как это сделать с минимальным потреблением памяти, а там как хотите, если условие теста вам позволяет, то "баба с возу кобыле легше" smile.gif
__
1 этап это 1 большой и 26 маленьких из него

_____________
Стимулятор ~yoomoney - 41001303250491
linker
Если памяти совсем мало, то можно пойти дальше, после того как насоздавали файлов в которых первые буквы начинаются на a, b и т.д. создаём файлы aa, ab и т.д., а старые a, b удаляем. В конце концов получатся файлы с отсортированными данными, которые потом просто склеиваем в один большой файл.

_____________
Gear Framework
Gear Framework на Github
Valick
linker
Цитата
и делаем выборку по второму символу, точно так же разбивая на файлы 1.1 1.2 1.3 и тд
и в зависимости от глубины сортировки вот так и мазохируем 1.1.1 - 1.1.1.1 - 1.1.1.1.1
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.