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


Автор: ichip 24.5.2007, 15:30
Код

<?php 
#Error_Reporting(E_ALL & ~E_NOTICE); 
$text = @file("./text.txt","r"); 
  if(!$text) { 
      exit("Ошибка открытия файла: \"text.txt\""); 
    } else { 
 for ($i=0; $i < count($text); $i++) { 
   $pattern = "|[^\"]*\"[^\"]*\"|"; 
 preg_match($pattern, $text[$i], $out); 
echo $out[0]; 
 } 
} 
?>

text.txt:
Код

Понедельник 28 мая 
09:10 "Приходи на меня посмотреть" Россия, комедия, 2001 
11:00 "Долгие проводы" СССР, драма, 1971 
13:00 "Подари мне лунный свет" Россия, мелодрама, 2001 
15:00 "Биндюжник и король" Россия, музыкальная комедия, 1991 
17:00 "Сумасшедший день" Россия, комедия, 2005 
19:00 "Время печали еще не пришло" Россия, драма, 1995 
21:00 "Какая чудная игра" Россия, трагикомедия, 1995 
23:00 "Похитители книг" Россия, боевик, 2003 
01:00 "Плащаница Александра Невского" Россия, детектив, 1991 
03:10 "Воры в законе" СССР, криминальная драма, 1988 г. 
05:00 "Бедный, бедный Павел" Россия, историческая драма, 2003 
07:00 "Кармен" Россия, авантюрная мелодрама, 2003 

Вторник 29 мая 
09:00 "Биндюжник и король" Россия, музыкальная комедия, 1991 
11:00 "Сумасшедший день" Россия, комедия, 2005 
13:00 "Время печали еще не пришло" Россия, драма, 1995 
15:00 "Д'Артаньян и три мушкетера" СССР, музыкальный фильм, 1978 
19:20 "Употребить до" Россия, новое немое кино, мелодрама/комедия, 1999 
21:00 "Воры в законе" СССР, криминальная драма, 1988 г. 
23:00 "Бедный, бедный Павел" Россия, историческая драма, 2003 
01:00 "Кармен" Россия, авантюрная мелодрама, 2003 
02:50 "Настройщик" Россия, мелодрама, 2003 
05:30 "Займемся любовью" Россия, комедия, 2001 
07:00 "Любовь на острове смерти" СССР, фантастический триллер, 1991

У меня скрипт вырезает "Понедельник 28 мая", "Вторник 29 мая", оставляя пустые строки, мне как раз нужно чтобы они оставались, тоесть после обработки text.txt выглядел так:
Код

Понедельник 28 мая 
09:10 "Приходи на меня посмотреть"
11:00 "Долгие проводы"
13:00 "Подари мне лунный свет"
15:00 "Биндюжник и король"
17:00 "Сумасшедший день"
19:00 "Время печали еще не пришло"
21:00 "Какая чудная игра"
23:00 "Похитители книг"
01:00 "Плащаница Александра Невского"
03:10 "Воры в законе"
05:00 "Бедный, бедный Павел"
07:00 "Кармен"

Вторник 29 мая 
09:00 "Биндюжник и король"
11:00 "Сумасшедший день"
13:00 "Время печали еще не пришло"
15:00 "Д'Артаньян и три мушкетера"
19:20 "Употребить до"
21:00 "Воры в законе"
23:00 "Бедный, бедный Павел"
01:00 "Кармен"
02:50 "Настройщик"
05:30 "Займемся любовью"
07:00 "Любовь на острове смерти"

Автор: SelenIT 24.5.2007, 15:48
По идее как-то так:
Код

<?php 
#Error_Reporting(E_ALL & ~E_NOTICE); 
$text = file_get_contents("./text.txt"); 
if(!$text) { 
      exit("Ошибка открытия файла: \"text.txt\""); 
} else { 
      echo preg_replace('/".*?$/m', '"', $text);
} 
?>


Хм, почему-то регулярка не сработала... сорри. Тогда так:
Код

      echo preg_replace('/"[^\"\n]*\n/', "\"\n", $text); // 7-я строчка

Автор: pento 24.5.2007, 15:56
explode() +  foreach + substr() + strpos() + implode()

Автор: SelenIT 24.5.2007, 15:58
pento, а не лень?  smile 

Автор: pento 24.5.2007, 16:00
SelenIT, неа =)

Автор: teroni 24.5.2007, 17:19
Код

<?php
$text = file("test.txt");
if(!$text)
   {
   exit("Ошибка открытия файла: \"text.txt\"");
   } 
else
   {
   for ($i=0; $i < count($text); $i++) 
      {
      $pattern = "|[^\"]*\"[^\"]*\"|";
      preg_match($pattern, $text[$i], $out);
      echo (isset($out[0])) ? $out[0] : $text[$i];
      echo '<br />';
      }
   }
?>

Автор: SelenIT 25.5.2007, 07:47
Вообще, имхо, если делать достойно - так распарсить бы это дело в массив:
Код

$f = fopen("./text.txt","r");
$shed = array();
while ($s = fgets($f)) {
   if(!preg_match('/^(\d{2}:\d{2}) "([^"]*)" (.*?)$/', $s, $m)) $day = trim($s);
   else $shed[$day][$m[1]] = array('name'=>$m[2], 'info'=>$m[3]);
}
// print_r($shed);

А потом выводить его в каком угодно красивом виде, например:
Код

foreach ($shed as $day => $dayshed) {
   ?>
   <h1><?=$day?></h1>
   <table><?
   foreach ($dayshed as $time=>$film) {
      ?>
      <tr>
         <th><?=$time?></th>
         <td title="<?=$film['info']?>"><?=$film['name']?></td>
      </tr><?
   }
   ?>
   </table><?
}

Автор: ichip 25.5.2007, 12:06
Всем большое спасибо, тему можно закрыть.

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