Forum Webscript.Ru
Программирование => PHP => Тема начата: Wanderer от 23 Января 2003, 21:22:07
-
Знатоки, помогите начинающему программеру PHP решить простенькую задачу, пожалуйста:
имеем текстовый файл типа:
СЛОВО ЦИФРА
СЛОВО ЦИФРА
и так далее
Необходимо при очередной записи в этот файл к последней ЦИФРА прибавит 1 и записать соответственно в конец файла.
На улице уже ночь, а времени на решение задачи почти не осталось и мозги уже кипят литературу ворошить :insane:
-
Конечно можно написать лучше...
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;
}
-
Замечания :-)
После file джойнить надо пустой строкой.
читать весь файл - непроизводительно.
открывать два раза - непроизводительно
Непонятки.
Зачем ссылка на массив?
Предложения.
Открывать на а+, читать с конца килобайт примерно, тримать, strrpos-ить \\n, брать число, добавлять строку, фсикаем на конец, пишем.
Заключение. Для примера и обучения твой пример вполне неплох.
-
После file джойнить надо пустой строкой.
Я всегда путаю... Спасибо. :)
Зачем ссылка на массив?
Чтобы тут прописать только ссылку, всмысле чтобы более читабельно было.
$last_string_contents=explode(" ", $last_string);
Заключение. Для примера и обучения твой пример вполне неплох.
Для этого он и писался, лучше научить человека, чем писать за него. Потому что твой вариант, он наверное бы не понял, но зато твой вариант намного быстрее. ;) Я же написал:Конечно можно написать лучше...
-
Спасибо всем, кто откликнулся на просьбу. Напровление решения усек и дополнил. В результате задачку решил, но вылезла проблема:
Результат дописывается в файл в кодировке "windows-1251", а мне надо его туда дописывать в "KOI8-R". Как быть?!
причем вывод формы через веб должен быть в "windows-1251" - по другому никак :(
-
$string=convert_cyr_string($string, "w", "k");