|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 66130.6629 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
28.10.2010, 18:04
|
#1
|
Senior Member
Регистрация: 05.10.2009
Сообщений: 687
Бабло: $152005
|
php работа с файлами
Необходимо решить одну задачу, помогите пожалуйста.
Есть текстовый файл в котором 100000-200000 строк, нужен скрипт при обращении к которому он выводил в эхо первые 100 строк из этого файла, дописывал в конец другого файла эти 100 строк, и убирал из начала исходного файла первые 100 строк.
|
|
|
28.10.2010, 18:54
|
#2
|
Юниор
Регистрация: 09.09.2010
Сообщений: 6
Бабло: $2705
|
PHP код:
<?
$file1 = '1.txt';
$file2 = '2.txt';
// Получаем первые 100 строк из файла
$file1_content = file($file1);
$first_100 = array_slice($file1_content,0,100);
foreach ($first_100 as $str) echo $str.'<br>';
$first_100 = implode('',$first_100);
// Удаляем первые 100 строк из файла
$file1_output = array_slice($file1_content,100);
$file1_output = implode('',$file1_output);
// Сохраняем
$f2 = fopen($file2,'a');
fwrite($f2,$first_100);
fclose($f2);
$f1 = fopen($file1, 'w');
fwrite($f1, $file1_output);
fclose($f1);
?>
|
|
|
29.10.2010, 00:26
|
#3
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от DrRobert
PHP код:
$file1_content = file($file1);
|
совет тебе мой: не делай так, когда объемы большие
а по теме я бы сделал так:
Код:
выводим первые 100 строк:
[oya@ebu]$ sed 100q 1.txt
выводим их в другой файл
[oya@ebu]$ sed 100q 1.txt >> 2.txt
удаляем первые 100 строк:
[oya@ebu]$ sed -i '1,100d' 1.txt
и какой смысл писать длинные php скрипты, когда есть sed?
который есть на любом хостинге, тем более примеров его использования в инете полно. Пишем в гугле: "sed вывести первые 10 строк"
|
|
|
05.11.2010, 09:41
|
#4
|
Senior Member
Регистрация: 05.10.2009
Сообщений: 687
Бабло: $152005
ТС -->
|
ТС
Есть скрипт он нормально работает когда в текстовом файле меньше 60000 строк, делаешь больше выдаёт пустой экран.
Как можно модернизировать скрипт чтобы он нормально работал с файлом где несколько миллионов строк.
Цитата:
<?php
$file=file("file.txt");
for ($g = 1; $g <= 300; $g++) {
$i = rand(0, 25035);
echo $file["$i"];
}
?>
|
|
|
|
05.11.2010, 10:31
|
#5
|
Ня?
Регистрация: 13.12.2009
Сообщений: 42
Бабло: $9990
|
Цитата:
Сообщение от aoki
Есть скрипт он нормально работает когда в текстовом файле меньше 60000 строк, делаешь больше выдаёт пустой экран.
Как можно модернизировать скрипт чтобы он нормально работал с файлом где несколько миллионов строк.
|
PHP код:
set_time_limit(0);
|
|
|
05.11.2010, 11:11
|
#6
|
Senior Member
Регистрация: 03.11.2009
Сообщений: 151
Бабло: $20330
|
Цитата:
Сообщение от Markus
PHP код:
set_time_limit(0);
|
Вряд ли поможет, у него весь файл в память грузится
|
|
|
05.11.2010, 14:04
|
#7
|
Senior Member
Регистрация: 17.08.2010
Сообщений: 175
Бабло: $25010
|
Цитата:
Сообщение от aoki
Есть скрипт он нормально работает когда в текстовом файле меньше 60000 строк, делаешь больше выдаёт пустой экран.
Как можно модернизировать скрипт чтобы он нормально работал с файлом где несколько миллионов строк.
|
Весь скрипт просто не переваривает сам пхп, ему памяти не хватает, можно увеличить количество памяти для пхп максимальное или примерно так:
cat file |sort -R | head -n 300
|
|
|
05.11.2010, 15:13
|
#8
|
Senior Member
Регистрация: 05.10.2009
Сообщений: 687
Бабло: $152005
ТС -->
|
ТС
Я по другому сделал, разделил файл на другие файлы, сначала рандомом выбирается файл, а потом из него выбираются строки.
|
|
|
05.11.2010, 15:48
|
#9
|
Senior Member
Регистрация: 26.08.2008
Адрес: UA
Сообщений: 2,941
Бабло: $402835
|
ну да, такой вариант норм, навскидку можно еще построчно один раз считать чтобы узнать количество строк, а второй раз - случайно брать строки, пропуская остальные.
|
|
|
|