Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Запись/чтение в/из файла по строчно + удаление элементов... (http://forum.oszone.net/showthread.php?t=31078)

Georgiy 17-07-2004 00:53 213129

1. Как считать из файла определенную строку? Как записать в файл на место одной строки другую?

Я пользовался функцией file(), то есть считал весь файл в массив-список и дальше работал со строками-элементами массива. Но при записи в файл fputs(,массив[$i]) / fwrite(,массив[$i]) в конец каждой строки файла добавлялся неопределенный символ. По-видимому - это "\n" или "\r\n".
Как правильно считывать и записывать в файл отдельные строки?
+ как избежать проблем с разным пониманием символов конца строки для UNIX/Windows?

2. Есть массив, созданный в цикле "на лету", то есть $Mass[]="abcd", $Mass[]="efhg", ...
Как мне наиболее граммотно удалить какой-нибудь элемент этого массива, так, чтобы после этого не было бы "дыр" в массиве? В общем, хотелось бы "совсем" удалить несколько элементов.

[s]Исправлено: Georgiy, 0:55 17-07-2004[/s]

Vlad Drakula 17-07-2004 02:58 213130

Georgiy
1) если хочешь работать с отдельными строками то так и придется делать, иначе ни как.
для задания кодировки есть настройка AddDefaultCharset в файле httpd.conf

2) помоему придется удалять его в ручную...

vadimiron 17-07-2004 15:29 213131

Georgiy
2)эллемент из массива удаляется с помощью unset($a[key]);
При этом не образуется никакой дыры, пара ключ/значение полностью удаляются

1)В мануале написано, что можно от знаков окончания строки избавится с помощью функции trim()
То есть читаем файл с помощью file(), а потом с помощью array_walk делаем trim() каждому элементу


[s]Исправлено: vadimiron, 13:30 17-07-2004[/s]

mar 17-07-2004 20:05 213132

вдогонку - упмянутая тут директива
Цитата:

AddDefaultCharset
- установка кодировки, но не конца строк, разных в unix и win, о чем, насколько я поняла, спрашивал  Georgiy. То есть тут не при чем :o
От знаков окончания строки, как уже написал vadimiron можно избавиться при помощи trim(), или, если удалять все это, откусывая именно от конца строки: rtrim() или chop()

Georgiy 18-07-2004 02:13 213133

vadimiron
Я почти также и делал: для каждой строки
$string=str_replace("\r","",$string);
Вот и подумал - что наверняка есть лучше метод. Плюс если это работает в Винде, как будет на другой ОС...

Vlad Drakula
Да, согласен с mar про догонку...
А про массив - в ручную, это через временные массивы?

Про unset: я применял эту функцию, но после применения этой функций дальше массив становился совсем пустым, хотя удалял 3 первых элемента...

mar 18-07-2004 14:40 213134

Georgiy
по поводу конца строк: дело в том, что как раз
Цитата:

trim(), или, если удалять все это, откусывая именно от конца строки: rtrim() или chop()
в плане избавления от кодов конца строк более универсальны, чем *использование str_replace():
Цитата:

string rtrim ( string str [, string charlist])

Замечание: Второй аргумент был добавлен в PHP 4.1.0

Эта функция возвращает строку str с удаленными из конца строки пробелами. Если второй параметр не передан, rtrim() удаляет следующие символы:

" " (ASCII 32 (0x20)), символ пробела.
"\t" (ASCII 9 (0x09)), символ табуляции.
"\n" (ASCII 10 (0x0A)), символ перевода строки.
"\r" (ASCII 13 (0x0D)), символ возврата каретки.
"\0" (ASCII 0 (0x00)), NUL-байт.
"\x0B" (ASCII 11 (0x0B)), вертикальная табуляция.

Можно также задать список символов для удаления с помощью аргумента charlist. С помощью .. можно задать диапазон символов.
Что касается unset - начиная с 4-ой версии PHP это языковая конструкция, а не функция, поэтому попытка вернуть из нее значение может вызвать ошибку. Ну и, если требуется удялять первые, или последние элементы массива, то проще воспользоваться функциями array_shift(), *или array_pop() соответственно


Время: 20:15.

Время: 20:15.
© OSzone.net 2001-