Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пакетная обработка данных 
:(
    Опции темы
EasyTask
Дата 18.12.2012, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Добрый день! Интересно поискать способ решения для следующей проблемы:

У нас имеются некие данные, которые получаются построчно (mysql_fetch или построчное чтение из файла, важное условие - изначально мы не знаем количество полученных строк). Нам необходимо формировать из этих данных определенный стек и выполнять некое действие, когда в стеке накопится достаточное количество данных. Например:

Построчное чтения из файла 1.txt строками в котором являются идентификаторы
-- 1 Итерация мы сохраняем идентификатор из 1 строки
-- 2 Итерация мы сохраняем идентификатор из 2 строки
-- 3 Итерация мы сохраняем идентификатор из 3 строки
-- В стеке накопилось три сообщения - выполняем некое действие

Сейчас, в общем виде, у меня получилось такое решение для этой задачи:

У меня существует определенный класс, который добавляет данные в стек и по накоплению заданного количества записей в стеке выполняет некое действие, проблема в том, что делать когда размер пакета не кратен количеству исходных данных. Например мы решили формировать пакеты из 3 сообщений стека, а в исходных  данных у нас 11 строк. Последние 2 строки выпадут и не будут обработаны, т.к не будет добавлено третьего сообщения, обеспечивающего окончательное формирование пакета и выполнение обработки. Сейчас проблема решена таким образом, что после цикла получения данных, выполняется еще одна проверка, не осталось ли сообщений в стеке, и если они там есть - еще раз выполнить процесс обработки. Но мне не очень нравится этот подход, поэтому мне интересно послушать ваши решения - существует ли какой то способ, прямо внутри цикла определить что это последние получаемые данные и последний пакет нужно обрабатывать не полным?
PM MAIL   Вверх
Arantir
Дата 18.12.2012, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(EasyTask @  18.12.2012,  02:14 Найти цитируемый пост)
существует ли какой то способ, прямо внутри цикла определить что это последние получаемые данные

Люди такие интересные вопросы задают =) Это скорее философский вопрос, чем вопрос программирования.

А что вам, собственно, мешает это определить внутри цикла? Возможно, ответив на этот вопрос вы сразу же найдете ответ и на свой.

Вот небольшой условный пример, демонстрирующий складывание по 3 и выполнение каждые 3 или же при окончании данных:
Код

while(!$file_ends)
{
    $rows = 0;
    while($rows < 3 && !$file_ends)
    {
        $some_stack->add($some_data);
    }
    $some_stack->execute();
}
Вот что мешает вам реализовать такую схему у себя?


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
EasyTask
Дата 18.12.2012, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



этот вариант ничем не лучше представленного мной варианта smile интересует именно алгортим, который бы не нуждался в каких то дополнительных циклах/проверках вне класса выполняющего пакетную обработку.
PM MAIL   Вверх
skyboy
Дата 18.12.2012, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(EasyTask @  18.12.2012,  08:22 Найти цитируемый пост)
интересует именно алгортим, который бы не нуждался в каких то дополнительных циклах/проверках вне класса выполняющего пакетную обработку. 

алгоритмически это не решается, так как
Цитата(EasyTask @  18.12.2012,  02:14 Найти цитируемый пост)
важное условие - изначально мы не знаем количество полученных строк

вызывать за пределом цикла обработку вполне допустимо.
единственный совет — вынести код обработки в отдельную функцию, чтоб это не был суровый копипаст на 20+ строк.

PM MAIL   Вверх
Aliance
Дата 18.12.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Кстати, недавно прочитал о SplStack, может будет полезно: SPL
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.