|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||||||
Случайный выбор уникальных строк из файла без занесения последнего в массив24.02.2016, 18:58. Показов 4917. Ответов 9
Метки нет (Все метки)
Приветствую!
К сожалению, использование больших массивов - это лишняя трата ОЗУ. Как я понимаю, взяв в такой массив файл размером 25 МБ, PHP зарезервирует под него все 50. А если файл ещё больше? В общем, хотелось бы работать с такими файлами напрямую, т.е. без предварительного занесения их в массивы. Базы данных не рассматриваю ![]() Вот код, который берёт 9 случайных строк из файла и выводит их на экран:
Единственное, что приходит в голову - это создание массива, кол-во ключей которого равно кол-ву строк в файле. Все значения в этом массиве, разумеется, равны 0 (для экономии ОЗУ). Но если убрать из такого массива очередной элемент, после чего отсортировав его, это никак не скажется на строках самого файла. Далее, лезут мысли типа зацикливания mt_rand до тех пор, пока очередная взятая строка не будет уникальной среди уже взятых ранее, но это реально бред, а если нужно взять 900 тыс. уникальных строк из 1 млн.? Добавлено через 15 минут Забыл отметить: все строки в файле уникальные сами по себе.
0
|
||||||
| 24.02.2016, 18:58 | |
|
Ответы с готовыми решениями:
9
Случайный выбор строки из файла |
|
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
|
|
| 24.02.2016, 19:44 | |
|
sMario, Может быть вам подойдёт функция array_unique?
0
|
|
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||
| 24.02.2016, 19:47 | ||
|
Тем более этот скрипт что, будет работать как демон? Или все-таки он будет запускаться, выполняться, и тут же прекращаться? Тогда в этом точно нет смысла.
0
|
||
|
Hello Kitty
|
||||||||||||
| 24.02.2016, 19:58 | ||||||||||||
Сообщение было отмечено sMario как решение
Решение![]() впрочем это легко сделать и по вашему условию
2
|
||||||||||||
|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||||
| 24.02.2016, 20:25 [ТС] | ||||
|
Может я конечно чего-то не понимаю, но мне всё это видится именно в таком ключе Поправьте, если не согласны.
0
|
||||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|||||||||||||
| 24.02.2016, 20:48 | |||||||||||||
![]() Занять 50 мегабайт ОЗУ на 100 мс это вообще незаметно произойдет. А вот как именно будет это происходить - это другой вопрос. Выделить 50 МБ ОЗУ и освободить их через 100 мс - это вообще фигня. А Вы те же самые 50 МБ прогоняете, только не за 1 раз, а за 1000000 (или сколько там у Вас строк в этих 50 МБайтах). Да и в итоге Вы этот файл 2 раза прогоняете, судя по скрипту. Вот такими манипуляциями действительно можно процессор подгрузить, это увеличит время исполнения. Ну я не знаю как еще понятнее объяснить. Представьте, что Вам сложнее, 1 раз поднять 10 килограмм и тут же бросить, или 10000 раз поднять по 1 грамму? Тут то же самое.Добавлено через 1 минуту
Да и вообще все функции с работой с файлами следует сводить к минимуму. Не нужно файл 2 раза перечитывать. Я бы начал так
0
|
|||||||||||||
|
Hello Kitty
|
|||||||
| 24.02.2016, 20:51 | |||||||
|
при count(file("file.txt")); php выкачает весь файл, потом разобьет его на на строки, потом создаст асоциативный(а они все же такие…) массив и если строк много может подпрыгнуть память. если строк очччень многа будет своп и count(file("file.txt")); отработает медленней
0
|
|||||||
|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||
| 24.02.2016, 21:26 [ТС] | ||
Я же объясняю, что разница между непосредственной работой с файлом и с предварительным его прогоном через массив (file('файл')) составляет сотые секунды, но использование массива дополнительно съедает и ОЗУ в двойном размере от размера самого файла. И не важно, сколько раз цикл гонял по файлу, главное, что скрипт использовал процессор одно и то же время, но во втором случае ещё и ОЗУ сожрал. Может мы о разных вещах толкуем? ![]() WhiteMind А что в вашем скрипте означают записи return [] и result = [] ? И вообще, честно говоря, думал что задача как-то проще решается. Очень уж мудрёно выходит. Может и правда смириться с неким жором ОЗУ в пользу простоты кода? Не люблю код, в котором потом сложно разобраться, если нужно. Не все мы математику в школе хорошо учили
0
|
||
|
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 16
|
||
| 24.02.2016, 22:20 [ТС] | ||
|
0
|
||
| 24.02.2016, 22:20 | |
|
Помогаю со студенческими работами здесь
10
Случайный выбор файла из ресурсов
Как обойтись без метода Свернуть() для подсчет уникальных строк в ТЗ Случайный выбор определённых слов при копировании одного файла в другой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|