как оставить в файле только строки начинающиеся с конкретной буквы?
как оставить в файле только строки начинающиеся с конкретной буквы (php)?
Ответы (1 шт):
Ваш вариант в принципе нормальный. Единственный минус он не будет корректно работать на multibyte-строках. Для этого замените substr на mb_substr. Также Вы не учитываете тот момент, что файл может быть очень большим по размеру и просто-напросто Вам не хватит выдеяемой под работу PHP памяти, чтобы поместить все строки файла в массив. В своем варианте я учел и то и другое замечание. Попробуйте его, возможно он Вам подойдет.
P.S Еще нужно учесть то, что при большом по размеру файле время работы php-скрипта может оказаться довольно длительным и он у Вас прервет свою работу т.к закончится максимальное время разрешенной для его выполнения. Для исключения этого, либо поправьте соответствующий параметр в php.ini, либо выставьте в начале скрипта флаг снимающий это ограничение. Это, с Вашего разрешения, я оставлю на Вас :)
test.txt
995использовав следующий код
я удаляю первые три символа если они совпадают с заданными.
а сейчас хочу995 его модифицировать
995 или если есть другой более оптимальны
способ чтоб удалял всю строку в файле
если она начинается с задойного значения. может подскажете?
test.php
<?php
$filename = "test.txt";
//Так как файл может быть большим, нам не подойдут
//file_get_contents и file
//открываем файл-источник на чтение
$fp = @fopen($filename, "r");
//файл открылся?
if ( $fp ) {
//создаем файл для записи
$fw = fopen("out.txt","w");
if ( $fw ) {
//читаем файл-источник пока не дойдем до конца файла
while (!feof( $fp ) ) {
$line = fgets( $fp );
//С помощью регулярного выражения заменяем в каждой прочитанной строки
//символы 995 вначале строки на пустоту тюе вырезаем их
//символ "^" означает "строка начинается с" - ну а далее мы указываем наши символы "995" для отрезания
$line = preg_replace("/^995.*?/", "", $line);
//Сохраняем получившуюся строку в другой файл
fputs($fw,$line);
}
//закрываем файл для записи
fclose($fw);
//закрываем файл-источник
fclose($fp);
}
}