[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись в текстовый Файл
began
Здравствуйте


В текстовый файл "file.txt" сохраняются поисковые запросы построчно.

Хотелось бы, что бы в него записывалось 5 000 строк,
после чего создавался новый файл "file2.txt" и так далее, в каждый последующий файл по 5000 строк
и что бы в созданный файл не записывались повторяющиеся строки (дубликаты)


Помогите Пожалуйста с кодом, как это можно реализовать на php
что сюда дописать ?


$data = $cautare\n;

$filename = "file.txt";

$fh = fopen($filename, "a+");

fwrite($fh, $data);

fclose($fh);




Спустя 14 минут, 35 секунд (2.08.2011 - 19:47) Invis1ble написал(а):
Примерно так
$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $dir . $files[$cnt - 1];
$content = file($last_file, FILE_SKIP_EMPTY_LINES));
$filename = count($content) < 5000 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt');
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);

Спустя 57 минут, 27 секунд (2.08.2011 - 20:44) ИНСИ написал(а):
began либо можно так:
function writeFile($value, $sizeRows = 5000) {
for($i = 1; true; $i++) {
//$file = str_pad($i, 4, '0', STR_PAD_LEFT) . '.txt';
$file = $i.'_log.txt';
if(sizeof(@file($file,FILE_SKIP_EMPTY_LINES)) <= $sizeRows) {
file_put_contents($file,$value,FILE_APPEND);
break;
}
}
}


writeFile("Тут текст\r\n");

Спустя 2 часа, 8 минут, 37 секунд (2.08.2011 - 22:53) began написал(а):
Цитата (Invis1ble @ 2.08.2011 - 16:47)
Примерно так
$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $dir . $files[$cnt - 1];
$content = file($last_file, FILE_SKIP_EMPTY_LINES));
$filename = count($content) < 5000 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt');
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);

Спасибо большое за ответ

Попробовал на запись 5 строк

$dir = "fresh/sources/raid/map/";

$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $dir . $files[$cnt - 1];
$content = file($last_file, FILE_SKIP_EMPTY_LINES));
$filename = count($content) < 5 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt');
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);



Получаю эрор тут

Parse error: syntax error, unexpected ')' in L:\home\mp34545.com\www\searches.php on line 88


то есть тут

$content = file($last_file, FILE_SKIP_EMPTY_LINES));


если удалить в конце ')'

то получаю эрор

Parse error: syntax error, unexpected ')' in L:\home\mp34545.com\www\searches.php on line 89


то есть тут

$filename = count($content) < 5000 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt');


если удалить в конце ')'
то файл не создается

а при count($content) < 1

в файлы создаются и в них записываются по 1 строке

Подскажите, Пожалуйста, где подправить код? в чем ошибка?


Спасибо всем за помощь

Спустя 43 минуты, 57 секунд (2.08.2011 - 23:37) Invis1ble написал(а):
Да, скобки там лишние в обоих случаях. Минут через 10 освобожусь, гляну где баг.

Спустя 3 минуты, 57 секунд (2.08.2011 - 23:41) neadekvat написал(а):
Invis1ble, заодно исправь допустимое количество записей в файле. Сейчас это 5001, а автор, кажется, хотел 5000.
А вообще, судя по скобкам, ты будто в толчок спешил, так по клаве стучал, набирая код)

Спустя 24 минуты, 2 секунды (3.08.2011 - 00:05) Invis1ble написал(а):
began
попробуй так:
$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $dir . $files[$cnt];
$content = file($last_file, FILE_SKIP_EMPTY_LINES);
$filename = count($content) < 5000 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt';
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);

в директории должен быть как минимум один файл, и он должен иметь имя file1.txt

Спустя 12 минут, 59 секунд (3.08.2011 - 00:18) ИНСИ написал(а):
began интересно, почему мой вариант не выбрал :)

Цитата
$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $dir . $files[$cnt - 1];
$content = file($last_file, FILE_SKIP_EMPTY_LINES));
$filename = count($content) < 5 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt');
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);


Если в папке текстовые документы только те - что нужны, то я бы сделал так:
$sizeOf = sizeof(glob($dir.'*.txt'));
if($sizeOf > 0) {
$fileSizeOf = file($dir.$sizeOf.'.txt', FILE_SKIP_EMPTY_LINES);
$fileName = ($fileSizeOf >= 5000 ? ++$sizeOf : $sizeOf) . '.txt';
} else {
$fileName = '1.txt';
}
file_put_contents($fileName, $data, FILE_APPEND);

Спустя 6 минут (3.08.2011 - 00:24) began написал(а):
Цитата (Invis1ble @ 2.08.2011 - 21:05)
began
попробуй так:
$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $dir . $files[$cnt];
$content = file($last_file, FILE_SKIP_EMPTY_LINES);
$filename = count($content) < 5000 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt';
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);

в директории должен быть как минимум один файл, и он должен иметь имя file1.txt

$dir = "fresh/sources/raid/map/";

$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $dir . $files[$cnt];
$content = file($last_file, FILE_SKIP_EMPTY_LINES);
$filename = count($content) < 2 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt';
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);


пробую на запись в файл по 2 ве строки

в директории "fresh/sources/raid/map/"
лежит файл file1.txt

в него записываются 2 ве строки , потом создается второй файл

"file1.txtfile1.txt" куда записывается 1 строка , потом создается "file1.txtfile2.txt" файл куда тоже записывается 1 строка и так далее ......

Спустя 31 минута, 39 секунд (3.08.2011 - 00:55) Invis1ble написал(а):
Нашел ошибку
$dir = "fresh/sources/raid/map/";

$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $files[$cnt - 1];
$content = file($last_file, FILE_SKIP_EMPTY_LINES);
$filename = count($content) < 2 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt';
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);

Спустя 6 минут, 56 секунд (3.08.2011 - 01:02) began написал(а):
Цитата (Invis1ble @ 2.08.2011 - 21:55)
Нашел ошибку
$dir = "fresh/sources/raid/map/";

$files = glob($dir . '*.txt');
$cnt = count($files);
$last_file = $files[$cnt - 1];
$content = file($last_file, FILE_SKIP_EMPTY_LINES);
$filename = count($content) < 2 ? $last_file : $dir . 'file' . ($cnt + 1) . '.txt';
if ($last_file != $filename || !in_array($data, $content))
file_put_contents($filename, $data, FILE_APPEND);

ура. Спасибо ГРОМАДНОЕ, все работает отлично
как гора с плеч biggrin.gif user posted image

Спустя 7 часов, 53 минуты, 55 секунд (3.08.2011 - 08:56) ИНСИ написал(а):
began мне стало еще интереснее. Я тебе дал 2 разных кода, рабочих - а ты их не стал использовать. Почему? Просто ради интереса, я не говорю чтобы ты их использовал smile.gif

Спустя 7 часов, 40 минут, 15 секунд (3.08.2011 - 16:36) Invis1ble написал(а):
INSIDIOUS
у тебя там не учитывается создание дубликатов

Спустя 5 часов, 14 минут (3.08.2011 - 21:50) ИНСИ написал(а):
Цитата
INSIDIOUS
у тебя там не учитывается создание дубликатов

Дубликат никак не создастся сам по себе в моем коде. Или ты что-то другое имеешь в виду?

Спустя 2 минуты, 51 секунда (3.08.2011 - 21:53) Invis1ble написал(а):
INSIDIOUS
Цитата
Дубликат никак не создастся сам по себе в моем коде. Или ты что-то другое имеешь в виду?

ага:
Цитата
и что бы в созданный файл не записывались повторяющиеся строки (дубликаты)


Спустя 31 минута, 52 секунды (3.08.2011 - 22:25) ИНСИ написал(а):
Invis1ble не заметил этих слов :) Так там всего одну проверку надо добавить:
$sizeOf = sizeof(glob($dir.'*.txt'));
if($sizeOf > 0) {
$fileSizeOf = file($dir.$sizeOf.'.txt', FILE_SKIP_EMPTY_LINES);
$fileName = ($fileSizeOf >= 5000 ? ++$sizeOf : $sizeOf) . '.txt';
} else {
$fileName = '1.txt';
}
if( ($fileName != $sizeOf) or (!in_array($data,$fileSezeof)) )
file_put_contents($fileName, $data, FILE_APPEND);

Спустя 5 минут, 24 секунды (3.08.2011 - 22:31) Invis1ble написал(а):
INSIDIOUS
Цитата
не заметил этих слов

я тоже сначала не заметил и написал без проверки smile.gif
по-видимому он отредактировал пост просто

Спустя 19 минут, 1 секунда (3.08.2011 - 22:50) ИНСИ написал(а):
Цитата
по-видимому он отредактировал пост просто

Да, мне тоже так кажется. Потому что я сперва прочитал его пост и только потом стал писать код. Думал пропустил. Но раз и ты не заметил первый раз - вывод один, на нас "заработали" smile.gif

Спустя 3 дня, 9 часов, 35 минут, 57 секунд (7.08.2011 - 08:26) began написал(а):
Здравствуйте.

Ребята пост не редактировал 100%,
описал сразу все как есть.

INSIDIOUS,
не сомневаюсь что ваши варианты рабочие,
но у меня не получилось их настроить.

Еще раз спасибо за помощь участие.
Быстрый ответ:

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