[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Чтение из файла
linklink26
В общем есть файл(дамп базы), он просто огромен.
Точнее там одна строка километровая.

Я его читаю fgets-ом и пытаюсь распарсить на 2 части.

Читается но при попытке распарсить explode_ом или preg_match_all-ом вываливается ошибка что не хватает памяти.

Пробовал читать fread по кускам он просто читает без ошибки но не все. Где-то обрезается.

Что посоветуете?



Спустя 27 минут, 33 секунды (30.11.2010 - 11:32) linklink26 написал(а):
Вот код. Не получается отсеить все что выше "Dumping data for"

$fp=fopen($file, 'r');

while (! feof($fp) ) {
$file_text .= fread($fp,2000);
}

fclose($fp);

$file_text_mass = explode("Dumping data for", $file_text);

Спустя 1 час, 43 минуты, 26 секунд (30.11.2010 - 13:16) vergin написал(а):
фраза "Dumping data for" встречается единажды в тексте?

Спустя 1 час, 58 минут, 21 секунда (30.11.2010 - 15:14) linklink26 написал(а):
да

Спустя 12 часов, 16 минут, 31 секунда (1.12.2010 - 03:30) Crater написал(а):
Зачем preg_match_all ? Насколько мне известно, он нужен для возврата массива значений, соответствующих макету. А раз соответствие заведомо одно, сойдёт и preg_match.

Спустя 14 часов, 45 минут, 4 секунды (1.12.2010 - 18:16) vergin написал(а):
попробуй, читая по-частям, проверять каждую часть на наличие требуемой фразы. И все, что было до нахождения стоп-фразы - это и будет твой дамп, а все что после - читаться не будет

Спустя 34 минуты, 15 секунд (1.12.2010 - 18:50) Dron19 написал(а):
Пробуй так:

<?
error_reporting (0);
$fp=fopen($file, 'r');
$file_text = fread($fp,filesize($file)) or die("Не удалось прочитать файл, так как он пустой!");
fclose($fp);
if($file_text)
$file_text_mass = explode("Dumping data for", $file_text);
unset($file_text);
echo $file_text_mass[1];
?>

Если сработает поставь плюс =)

Спустя 37 минут, 9 секунд (1.12.2010 - 19:27) Dron19 написал(а):
Что бы fread не обрезал вывод файла, нужно указать его размер, а у тебя кажись файл дамп не 2кб весит, ты указал 2000, то есть читает 2000байт, а дальше забывает про все оставшиеся, так что используй функцию filesize();
Функция feof(); тут тоже практический не нужна

Спустя 4 дня, 20 часов, 43 минуты, 55 секунд (6.12.2010 - 16:11) linklink26 написал(а):
В общем fread мой огромный файл прочитать таки не смог.

Зато сработало file($file);

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

Спустя 54 минуты, 51 секунда (6.12.2010 - 17:06) Invis1ble написал(а):
Цитата
вываливается ошибка что не хватает памяти

можно еще попробовать ini_set('memory_limit', 0); но думаю, что это костыль, причем опасный... unsure.gif

Спустя 4 часа, 21 минута, 19 секунд (6.12.2010 - 21:27) SlavaFr написал(а):
Цитата (linklink26 @ 30.11.2010 - 08:05)
Точнее там одна строка километровая.

Цитата (linklink26 @ 6.12.2010 - 13:11)
Зато сработало file($file);

и теперь километровая строчка в масиве должна чтото изменить?

Спустя 1 день, 12 часов, 46 минут, 41 секунда (8.12.2010 - 10:14) linklink26 написал(а):
SlavaFr
Конечно, массив бьется на маленькие массивчики и с ними работаю. А так была просто ошибка.

Спустя 2 часа, 17 минут, 17 секунд (8.12.2010 - 12:31) SlavaFr написал(а):
как бьется?

Спустя 1 день, 2 часа, 42 минуты, 14 секунд (9.12.2010 - 15:13) linklink26 написал(а):
SlavaFr
Фор n строк, внутри накопитель, потом создаю новый файл в который кладу содержимое и закрываю, и по кругу.

На выходе куча мелких файлов

Спустя 1 месяц, 20 дней, 4 часа, 33 минуты, 26 секунд (1.02.2011 - 19:47) Dron19 написал(а):
кстати функция file работает быстрей fopen, fread и f puts, тем более вместе взятых
еще кстати можно было с помощью fgets или fgetc или file_get_contents, а также readfile - способов много, а если с помощью функции файл, то можно просто вот так

$join = join('',file('file.dat'));


и тот вариант который я тебе дал ложовый
Быстрый ответ:

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