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
Re: Запись/чтение в/из файла по строчно + удаление элементов...
Georgiy
1) если хочешь работать с отдельными строками то так и придется делать, иначе ни как.
для задания кодировки есть настройка AddDefaultCharset в файле httpd.conf
2) помоему придется удалять его в ручную...
1) если хочешь работать с отдельными строками то так и придется делать, иначе ни как.
для задания кодировки есть настройка AddDefaultCharset в файле httpd.conf
2) помоему придется удалять его в ручную...
-
vadimiron
Re: Запись/чтение в/из файла по строчно + удаление элементов...
Georgiy
2)эллемент из массива удаляется с помощью unset($a[key]);
При этом не образуется никакой дыры, пара ключ/значение полностью удаляются
1)В мануале написано, что можно от знаков окончания строки избавится с помощью функции trim()
То есть читаем файл с помощью file(), а потом с помощью array_walk делаем trim() каждому элементу
[s]Исправлено: vadimiron, 13:30 17-07-2004[/s]
2)эллемент из массива удаляется с помощью unset($a[key]);
При этом не образуется никакой дыры, пара ключ/значение полностью удаляются
1)В мануале написано, что можно от знаков окончания строки избавится с помощью функции trim()
То есть читаем файл с помощью file(), а потом с помощью array_walk делаем trim() каждому элементу
[s]Исправлено: vadimiron, 13:30 17-07-2004[/s]
-
mar
Re: Запись/чтение в/из файла по строчно + удаление элементов...
вдогонку - упмянутая тут директива
Цитата:
AddDefaultCharset
- установка кодировки, но не конца строк, разных в unix и win, о чем, насколько я поняла, спрашивал Georgiy. То есть тут не при чем
От знаков окончания строки, как уже написал vadimiron можно избавиться при помощи trim(), или, если удалять все это, откусывая именно от конца строки: rtrim() или chop()
Цитата:
AddDefaultCharset
- установка кодировки, но не конца строк, разных в unix и win, о чем, насколько я поняла, спрашивал Georgiy. То есть тут не при чем
От знаков окончания строки, как уже написал vadimiron можно избавиться при помощи trim(), или, если удалять все это, откусывая именно от конца строки: rtrim() или chop()
-
Georgiy
Re: Запись/чтение в/из файла по строчно + удаление элементов...
vadimiron
Я почти также и делал: для каждой строки
$string=str_replace("\r","",$string);
Вот и подумал - что наверняка есть лучше метод. Плюс если это работает в Винде, как будет на другой ОС...
Vlad Drakula
Да, согласен с mar про догонку...
А про массив - в ручную, это через временные массивы?
Про unset: я применял эту функцию, но после применения этой функций дальше массив становился совсем пустым, хотя удалял 3 первых элемента...
Я почти также и делал: для каждой строки
$string=str_replace("\r","",$string);
Вот и подумал - что наверняка есть лучше метод. Плюс если это работает в Винде, как будет на другой ОС...
Vlad Drakula
Да, согласен с mar про догонку...
А про массив - в ручную, это через временные массивы?
Про unset: я применял эту функцию, но после применения этой функций дальше массив становился совсем пустым, хотя удалял 3 первых элемента...
-
mar
Re: Запись/чтение в/из файла по строчно + удаление элементов...
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() соответственно
по поводу конца строк: дело в том, что как раз
Цитата:
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() соответственно