ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 19.12.2008, 01:16
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
С нами: 10191686

Репутация: 210
По умолчанию

Цитата:
Сообщение от Pashkela  
Файловый резак, причем с исходниками:

http://old.softerra.ru/softnews/2002/5/6/20594/
Извини конечно, но зачем мне "Файловый резак"???
Тем боле Windows, я же не фильм на депозит выкладываю
Читаем внимательно вопрос!

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

Цитата:
А чем тебе не нравится построчное считывание? В соответствии с правилами твоей задачи, считывать по одной строке, проводить ее анализ и выполнять далее какие-то действия... Сомневаюсь, что выйдет гиперсложный алгоритм, тем более, что тебе, вобщем-то, насколько я понял, не надо проверять корректность данных... Так что можно помозговать, рассказывай конкретнее
Та алгоритм - не сложный, как я говорил, простой конечный автомат уже сделал, НО
С file все работате нормально на маленьких файлах...
Но большие скорее всего не потянет, вот и спрашиваю, может у кого есть другие идеи,

При 300 000 записей только в одной таблице, а таблицы будет скорее всего 3, нехватка памти, на локалхосте, еще ладно... но на серваке...

уже обдумаю о том, что заказчику понадобится выделенный сервант, что бы хотя бы с file запустить

Последний раз редактировалось Naydav; 19.12.2008 в 01:21..
 
Ответить с цитированием

  #2  
Старый 19.12.2008, 01:27
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами: 9649706

Репутация: 3338


По умолчанию

Цитата:
Сообщение от Naydav  
Извини конечно, но зачем мне "Файловый резак"???
Не знаю, зачем, но я только что за 3 сек порезал дамп весом в 43 мб на 89 частей каждая по 500 кб. Не надо так не надо. Умничай дальше
 
Ответить с цитированием

  #3  
Старый 19.12.2008, 01:34
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
С нами: 10191686

Репутация: 210
По умолчанию

Цитата:
Сообщение от Pashkela  
Не знаю, зачем, но я только что за 3 сек порезал дамп весом в 43 мб на 89 частей каждая по 500 кб. Не надо так не надо. Умничай дальше
Так хоть за 1 сек. 2 Гб обьясни, хотя бы себе, как я могу с моей задачей использовать твой совет? Неужели так трудно вопрос прочитать? вот именно, что "Не знаю, зачем"
 
Ответить с цитированием

  #4  
Старый 19.12.2008, 01:25
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
С нами: 9185589

Репутация: 128
По умолчанию

ты не понял, я не говорю о том, чтобы затягивать в память такую громадину, это, действительно, было бы глупо, а читать его, ИМХО, нужно построчно и передвигать указатель в файле, таким образом мы уйдем от больших затрат памяти, но получим затраты времени на обращение к ЖД и процессороного времени, но это уже будет совсем не такой критичный к ресурсам алгоритм. А еще лучше будет читать это все порциями...

Последний раз редактировалось ss88; 19.12.2008 в 01:31..
 
Ответить с цитированием

  #5  
Старый 19.12.2008, 01:31
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
С нами: 10191686

Репутация: 210
По умолчанию

Цитата:
Сообщение от ss88  
ты не понял, я не говорю о том, чтобы затягивать в память такую громадину, это, действительно, было бы глупо, а читать его, ИМХО, нужно построчно и передвигать указатель в файле, таким образом мы уйдем от больших затрат памяти, но получим затраты времени на обращение к ЖД и процессороного времени, но это уже будет совсем не такой критичный к ресурсам алгоритм
Я не могу считывать его построчно, так как не знаю размер строки...
Может я я не могу понять, что ты хочешь сказать, можно пример?

как реализовать считыванеи построчно? например прочтения 564 000 -ой строки?
 
Ответить с цитированием

  #6  
Старый 19.12.2008, 01:35
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
С нами: 9185589

Репутация: 128
По умолчанию

увеличением и запоминанием позиции чтения из файла. fseek(...)

Последний раз редактировалось ss88; 19.12.2008 в 01:37..
 
Ответить с цитированием

  #7  
Старый 19.12.2008, 01:39
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
С нами: 10191686

Репутация: 210
По умолчанию

Цитата:
Сообщение от ss88  
увеличением и запоминанием позиции чтения из файла.
Т.е что -то типа
- открыл файл
- считал инфу до переноса строки
- запомнил позицию

но после скажем 300 000 - ой строки,
нам при новом обращении к файлу, нужно будет осчитывать 300 000 переносов строк, пот 300 001, 300 002 и т.д.

ну это еще медленней чем file

Или как запоминать позицыю строки? приведи пример хотя бы на файле в 10 строк

---------
смотрю с fseek
при использовании fseek, нужно ЕЩЕ вычислять размер КАЖДОЙ считанной строки, что бы знать куда потом вернутся + алгоритм считывание новой строки до символа переноса строки( именно не побайтово, а до переноса строки) = еще медленее, вернее вообще хреново...

Чем больше вариантов пробую, тем убеждаюсь - не нужно изобретать велосипед - file()

но вариант был интересный

Последний раз редактировалось Naydav; 19.12.2008 в 01:55..
 
Ответить с цитированием

  #8  
Старый 19.12.2008, 01:41
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
С нами: 9185589

Репутация: 128
По умолчанию

щаз приведу
 
Ответить с цитированием

  #9  
Старый 19.12.2008, 01:54
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
С нами: 10191686

Репутация: 210
По умолчанию

Цитата:
Сообщение от ss88  
щаз приведу
Да все же уже, не нужно
я не увидел твой пост после редактирования, отписался выше
 
Ответить с цитированием

  #10  
Старый 19.12.2008, 01:55
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
С нами: 9185589

Репутация: 128
По умолчанию

PHP код:
<?php
    $currPos
=0;
    
$hFile=fopen("dump.txt","r");
    
//считывание порции определенного размера
    
$currentPartOfData=fread($hFile,4096);
    
$currPos+=4096;
    
//дочитыване до конца последней строки
    
do
    {
        
$currPos++;
        
$currentPartOfData.=$byte=fread($hFile,1);
    }
    while(
$byte!='\n')
?>
Сырой и толком непродуманный пример считывания порции из твоего файла, после обработки текущей порции, считывание продолжается оттуда, где мы закончили и читается следующая порция... Нужно учитывать длину файла. Собственно, вот, это будет лучше, чем забить несколько файлов по полгектара в память

Последний раз редактировалось ss88; 19.12.2008 в 01:59..
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.