Forum Webscript.Ru

Программирование => PHP => Тема начата: Wanderer от 23 Января 2003, 21:22:07

Название: Помогите решить тривиальную задачу, плз!
Отправлено: Wanderer от 23 Января 2003, 21:22:07
Знатоки, помогите начинающему программеру PHP решить простенькую задачу, пожалуйста:

имеем текстовый файл типа:

СЛОВО ЦИФРА

СЛОВО ЦИФРА

и так далее

Необходимо при очередной записи в этот файл к последней ЦИФРА прибавит 1 и записать соответственно в конец файла.

На улице уже ночь, а времени на решение задачи почти не осталось и мозги уже кипят литературу ворошить :insane:
Название: Помогите решить тривиальную задачу, плз!
Отправлено: Tronyx от 24 Января 2003, 00:15:44
Конечно можно написать лучше...

function AddWord($file, $word) {
    $file_data=file($file); // читаем файл
    $last_string=&$file_data[sizeof($file_data)-1]; // делаем ссылку на последнию строку
    $last_string_contents=explode(" ", $last_string);
 // в $last_string_contents[0] последнее слово
 // а в $last_string_contents[1] цифра
    $file_data[]=$word." ".($last_string_contents[1]+1); // добавляем новую строку
    $f=fopen($file, "a+") or die("Can`t open ".$file." file"); // открываем файл
    flock($f, 2); // ставим блокировку
    ftruncate($f,0); // очищаем файл
    fwrite($f, join("", $file_data)); // записываем
    flock($f,3); // снимаем блокировку
    fclose($f); // закрываем файл
    return true;
}
Название: Помогите решить тривиальную задачу, плз!
Отправлено: Меняздесьдавнонет от 24 Января 2003, 00:36:51
Замечания :-)
После file джойнить надо пустой строкой.
читать весь файл - непроизводительно.
 открывать два раза - непроизводительно
Непонятки.
Зачем ссылка на массив?
Предложения.
Открывать на а+, читать с конца килобайт примерно, тримать, strrpos-ить \\n, брать число, добавлять строку, фсикаем на конец, пишем.
Заключение. Для примера и обучения твой пример вполне неплох.
Название: Помогите решить тривиальную задачу, плз!
Отправлено: Tronyx от 24 Января 2003, 09:25:43
Цитировать
После file джойнить надо пустой строкой.

Я всегда путаю... Спасибо. :)

Цитировать
Зачем ссылка на массив?

Чтобы тут прописать только ссылку, всмысле чтобы более читабельно было.
Цитировать
$last_string_contents=explode(" ", $last_string);


Цитировать
Заключение. Для примера и обучения твой пример вполне неплох.

Для этого он и писался, лучше научить человека, чем писать за него. Потому что твой вариант, он наверное бы не понял, но зато твой вариант намного быстрее. ;) Я же написал:
Цитировать
Конечно можно написать лучше...
Название: Помогите решить тривиальную задачу, плз!
Отправлено: Wanderer от 27 Января 2003, 16:38:21
Спасибо всем, кто откликнулся на просьбу. Напровление решения усек и дополнил. В результате задачку решил, но вылезла проблема:
Результат дописывается в файл в кодировке "windows-1251", а мне надо его туда дописывать в "KOI8-R". Как быть?!
причем вывод формы через веб должен быть в "windows-1251" - по другому никак :(
Название: Помогите решить тривиальную задачу, плз!
Отправлено: Tronyx от 27 Января 2003, 17:14:43
$string=convert_cyr_string($string, "w", "k");