как оставить в файле только строки начинающиеся с конкретной буквы?

как оставить в файле только строки начинающиеся с конкретной буквы (php)?


Ответы (1 шт):

Автор решения: cy4oHok

Ваш вариант в принципе нормальный. Единственный минус он не будет корректно работать на 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);
    }
}
→ Ссылка