Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регулярные выражения


Автор: maxnsk82 17.6.2010, 11:58
У меня задачка: У имеющегося текстового файла удалить первую строку, в конце которой стоит во-просительный знак. Результат записать в другой файл.

Я вначале читаю из 1-го файла строки и заношу в массив $file, а потом перезаписаваю в 1й и 2й, так вот у меня все строки вновь в 1-м оказываются, а условие при котором нужно перенести первую вопросительную строку:
Код

while($file[$i]!="")
{
    if(!$flag&&preg_match("/\?\b/",$file[$i]))
    {
        fwrite($f2,$file[$i]);
        $flag++;
    }
    else 
    {
        fwrite($f1,$file[$i]);
    }
    $i++;
}


Видимо как-то не правильно шаблон написан? Пробовал ereg() использовать, но там тоже не получается(

Автор: s0lman 17.6.2010, 12:10
А зачем использовать регулярку для решения данной задачи? Не проще ли проверку сделать типа 
Код

if($file[$i][strlen($file[$i])-1] =='?') { ...}

?

Добавлено через 1 минуту и 2 секунды
Да, ereg-функции лучше и не пробуйте использовать)

Автор: maxnsk82 17.6.2010, 12:19
Сойдёт как вариант, хотя тема "регулярные выражения", и лучше используя их, может даже у меня и правильно написано, т.к. и с этим вариантом работать не хочет(, не понимаю почему? приведу весь код на всякий случай:

Код

<?
if(!file_exists("text.txt"))echo 'Не существует файла "text.txt"';
else
{
$f=fopen("text.txt","r");
echo "Содержимое файла:<br>";
readfile("text.txt");
fclose($f);
echo "<br>Необходимо вынести первую строку с ? в вонце в другой файл. Результат: ";
$file=file("text.txt");
$f1=fopen("text.txt","w+");
$f2=fopen("text2.txt","w+");
$flag=0; $i=0;
while($file[$i]!="")
{
    if(!$flag&&$file[$i][strlen($file[$i])-1]=='?')
    {
        fwrite($f2,$file[$i]);
        $flag++;
    }
    else 
    {
        fwrite($f1,$file[$i]);
    }
    $i++;
}
echo "<br>Содержимое файла text.txt: ";
readfile("text.txt");
echo "<br>Содержимое файла text2.txt: ";
readfile("text2.txt");
fclose($f1);
fclose($f2);
}
?>

Автор: patap 17.6.2010, 12:24
вот тебе регулярка
Код
\?$




зачем переменная $flag? шоб была? smile

Автор: s0lman 17.6.2010, 12:25
Цитата(maxnsk82 @  17.6.2010,  12:19 Найти цитируемый пост)
регулярные выражения

Я вижу

Цитата(maxnsk82 @  17.6.2010,  12:19 Найти цитируемый пост)
лучше используя их

Чем это лучше?

Регулярки тестирую http://regex.larsolavtorvik.com/

Автор: maxnsk82 17.6.2010, 12:42
лучше тем что так требуется преподавателем. а "\?$" в ereg() и "/\?$/" в preg_match ничего не находят, хотя вроде как в preg_match вместо $ используется \b..но и так не находит такую строку...спасибо за ссылку, пытаюсь там как-то сообразить что писать надо в pattern

Добавлено через 6 минут и 56 секунд
а flag - это что б только первую вопросительную строку перенести, остальные не надо....вроде нужен?

Автор: patap 17.6.2010, 12:53
Код

  $flag = true;
  foreach ($file as $str) {
    if($flag && preg_match('#\?\s?$#', $str)) {
      fwrite($f2, $str);
      $flag = false;
    } else {
      fwrite($f1,$str);
    }
  }



действительно упустил тот момент, что нужно только первую строку с ? обработать. 

Автор: maxnsk82 17.6.2010, 12:55
Во! Это рабочее) Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)