ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

19.12.2008, 01:34
|
|
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме: 849583
Репутация:
210
|
|
Сообщение от Pashkela
Не знаю, зачем, но я только что за 3 сек порезал дамп весом в 43 мб на 89 частей каждая по 500 кб. Не надо так не надо. Умничай дальше
Так хоть за 1 сек. 2 Гб обьясни, хотя бы себе, как я могу с моей задачей использовать твой совет? Неужели так трудно вопрос прочитать? вот именно, что "Не знаю, зачем"
|
|
|

19.12.2008, 01:35
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
увеличением и запоминанием позиции чтения из файла. fseek(...)
Последний раз редактировалось ss88; 19.12.2008 в 01:37..
|
|
|

19.12.2008, 01:39
|
|
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме: 849583
Репутация:
210
|
|
Сообщение от ss88
увеличением и запоминанием позиции чтения из файла.
Т.е что -то типа
- открыл файл
- считал инфу до переноса строки
- запомнил позицию
но после скажем 300 000 - ой строки,
нам при новом обращении к файлу, нужно будет осчитывать 300 000 переносов строк, пот 300 001, 300 002 и т.д.
ну это еще медленней чем file
Или как запоминать позицыю строки? приведи пример хотя бы на файле в 10 строк
---------
смотрю с fseek
при использовании fseek, нужно ЕЩЕ вычислять размер КАЖДОЙ считанной строки, что бы знать куда потом вернутся + алгоритм считывание новой строки до символа переноса строки( именно не побайтово, а до переноса строки) = еще медленее, вернее вообще хреново...
Чем больше вариантов пробую, тем убеждаюсь - не нужно изобретать велосипед - file()
но вариант был интересный 
Последний раз редактировалось Naydav; 19.12.2008 в 01:55..
|
|
|

19.12.2008, 01:41
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
щаз приведу
|
|
|

19.12.2008, 01:54
|
|
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме: 849583
Репутация:
210
|
|
Сообщение от ss88
щаз приведу
Да все же уже, не нужно
я не увидел твой пост после редактирования, отписался выше
|
|
|

19.12.2008, 01:55
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
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..
|
|
|

19.12.2008, 02:01
|
|
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме: 849583
Репутация:
210
|
|
Сообщение от ss88
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')
?>
Сырой и толком непродуманный пример считывания порции из твоего файла, после обработки текущей порции, считывание продолжается оттуда, где мы закончили и читается следующая порция... Нужно учитывать длину файла. Собственно, вот, это будет лучше, чем забить несколько файлов по полгектара в память
Спасибо, на скорую руку, как я писал уже,
работает медленней чем file, но пища для размышленний есть!!!
еще раз спасибо!
|
|
|

19.12.2008, 02:06
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Для долбиков в оправдание моего мега-метода, придуманного налету
Разрезаем файл на части указанной выше программой, получаем что-то типо вроде:
sql.0, sql.1 - ну это если на две части. А дальше такой код:
PHP код:
<?
for($i=0;$i<2;$i++) $p[$i]=File("sql." . $i);
print_r ($p);
?>
Последний раз редактировалось Pashkela; 19.12.2008 в 02:12..
|
|
|

19.12.2008, 02:09
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
Сообщение от Naydav
Спасибо, на скорую руку, как я писал уже,
работает медленней чем file, но пища для размышленний есть!!!
еще раз спасибо!
Ну дык, конечно же медленнее, вместо того, чтобы одним махом прочитать 300Мб, дергать винт за каждой порцией... Здесь просто нужно еще найти среднепривлекательный размер этих порций, тогда задержка, вызванная работой с диском уменьшится... Я думаю, порции порядка 20-30Мб - вполне приемлемы... Главное, потом сделать более или менее оптимальный алгоритм разбора полученного массива, чтобы он не делал лишних действий и беганий...
|
|
|

19.12.2008, 02:12
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
Сообщение от Pashkela
Для долбиков в оправдание моего мега-метода, придуманного налету
Разрезаем файл на части указанной выше программой, получаем что-то типо вроде:
sql.0, sql.1 - ну это если на две части. А дальше такой код:
PHP код:
<?
for($i=0;$i<2;$i++) $p[0][$i]=File("sql." . $i);
print_r ($p);
?>
Ну и чем это лучше??? Если мы работаем с порциями то последовательно сможем дочитывать то, чего нам не хватило, а если есть твои два файла и получился разрыв строки между ними, что тогда?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|