[help] Удаление строк которые начинаются с " ` ' ! ? ^ &

Статус
В этой теме нельзя размещать новые ответы.

blackspy

Постоялец
Регистрация
11 Мар 2007
Сообщения
426
Реакции
144
Надо удалить из файла те строки которые начинаются на определённые символы " ` ' ! ? и т.д желателен вариант где без особых примудростей я смогу самостоятельно расширить список этих символов.
 
Textpipe:
Добавить в левое поле, к примеру "123".
Удалить согласующиеся строки 123("|`|'|!|?|^|&)
Найти 123 заменить на.
Как-то так, хотя есть еще варианты.
 
Есть ещё варианты с текстпайпом или другие?
Если другие то можно их озвучить?
 
Если найдешь кряк на 8 версию, можно еще поэкспериментировать, а то:
Текущая версия TextPipe не поддерживает использование стандартных символов крышечки ^ - для поиска соответствия только начала строк, или символов $ - для поиска соответствия только конца строк. Эти мета символы работают с фильтром Соответствие схемы Grep, но не работают с фильтром Search and Replace.

Если вам надо использовать это свойство, одним из способов обхода является использование фильтров Добавить текст в начало строк или Добавить текст в конец строк для добавки некого ложного текста (которого как вы знаете нет в документе). Затем вы сможете включить этот ложный текст в схему поиска. Наконец, используйте фильтр Удалить столбцы для удаления дополнительного ложного текста когда вы заканчиваете поиск соответствий.
А чем мой вариант не подходит? Разницы все равно не заметишь.
 
Загоняешь стоп символы в массив.
Потом читаешь построчно файл и пишешь в другой только строки в которых первый символ в строке не находится в массиве символов.
 
PHP:
<?php
$in = file_get_contents('in.txt');
$out = preg_replace('/[!`\"]*[^\n]+\n/', "", $in); 
file_put_contents('out.txt', $out);
?>

Можешь добавлять в символьный класс символы, по которым нужно удалить строки:

$out = preg_replace('/[!`\"]+*[^\n]+\n/', "", $in);

ЗЫ: работоспособность может зависеть от конца строки, ну, если что, надеюсь, регекспы не проблема :) В крайнем случае - обращайся.
 
Регулярка выше удалить все от спецсимвола, до символа конца строки. Даже если он в середине строки.
Правильно:
PHP:
<?php 
$in = file_get_contents('in.txt'); 
$out = preg_replace('/^["`\'!?].*\r?\n?/m', "", $in);  
file_put_contents('out.txt', $out); 
?>
 
Вот вариант без регекспов, новичку будет проще для понимания / усовершенствования:

PHP:
$stopchars = array('"','`','!');
$in   = fopen('infile.txt','r');
$out = fopen('outfile.txt','w');
while( $str = fgets($in) )  {
   $firstchar = $str[0]; 
   if (in_array($firstchar, $stopchars)) {
       //  ничего не делаем
   } else {
       fwrite($out, $str);
   }
}
 
вместо
PHP:
   if (in_array($firstchar, $stopchars)) { 
       //  ничего не делаем 
   } else { 
       fwrite($out, $str); 
   }
лучше
PHP:
   if (!in_array($firstchar, $stopchars)) {
       fwrite($out, $str); 
   }
а так да, пример учень удобный
 
Советую обойтись без регулярных выражений, чтоб быстрее работало
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху