Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Исправление
 
 автор: Незнайка   (22.08.2008 в 17:58)   письмо автору
 
 

Добрый вечер.
Подскажите пожалуйста, возможно ли исправить в 10 файлах одновременно следующее?

Имеется: <title>Бесполезный текст</title> Нужно получить: <title>Книга <?php echo $title?></title> и вставить ниже:
$title="Программирование"; (нужно взять из тега strong)

Имеется: <strong>Программирование</strong> Нужно получить: <strong>Книга <?php echo $title?></strong>

  Ответить  
 
 автор: DDK   (22.08.2008 в 18:34)   письмо автору
 
   для: Незнайка   (22.08.2008 в 17:58)
 

В мощный редакторах типа HomeSite (мой любимый) есть функции batch replace. Там даже регулярными выражениями можно ругаться.

  Ответить  
 
 автор: sim5   (22.08.2008 в 18:38)   письмо автору
 
   для: DDK   (22.08.2008 в 18:34)
 

Да, поддерживаю, и не только в 10, а включая у всех выбранных типов в паке, включая подпапки.

  Ответить  
 
 автор: Незнайка   (22.08.2008 в 18:49)   письмо автору
 
   для: DDK   (22.08.2008 в 18:34)
 

Спасибо Всем.
А, как составить выражение, чтобы получилось, то, что мне нужно? Может, кто знает?

  Ответить  
 
 автор: DDK   (22.08.2008 в 19:58)   письмо автору
 
   для: Незнайка   (22.08.2008 в 18:49)
 

В Вашем случае к регулярным выраженям приьегать не придётся, ибо заменяемый текст во всех файлах одинаковый (?).

  Ответить  
 
 автор: Незнайка   (22.08.2008 в 20:36)   письмо автору
 
   для: DDK   (22.08.2008 в 19:58)
 

Извиняюсь. Забыл уточнить, что в каждом файле слова в теге strong разные :)

P.S. Если Вы чуть-чуть внимательнее посмотрите то обязательно заметите, что задача не из легких

  Ответить  
 
 автор: MAR_NIKOZA   (22.08.2008 в 23:21)   письмо автору
 
   для: Незнайка   (22.08.2008 в 20:36)
 

Элементарно решается.
напиши алгос и запусти - тут делов на 10 минут.
Могу лично для тебя набросать подобное...

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 00:18)   письмо автору
 
   для: MAR_NIKOZA   (22.08.2008 в 23:21)
 

Хорошо бы...

  Ответить  
 
 автор: MAR_NIKOZA   (23.08.2008 в 00:37)   письмо автору
 
   для: Незнайка   (23.08.2008 в 00:18)
 

Имеется: <title>Бесполезный текст</title>

Нужно получить: .......... ; Имеется ввиду - заменить?

<title>Книга <?php echo $title; ?></title>

и вставить ниже:
$title="Программирование"; (нужно взять из тега strong)

....... ; Заменить слово "Программирование" тем, что находится в strong?

Имеется:
<strong>Программирование</strong>

....... ; Но в слове strong у Вас тоже слово "Программирование"

Нужно получить: <strong>Книга <?php echo $title; ?></strong> ; Это вставить в strong?

================================

Можно файлик выложить для образца?

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 11:56)   письмо автору
353 байт
 
   для: MAR_NIKOZA   (23.08.2008 в 00:37)
 

Прошу прощение за задержку, электричество кончилось :)
Файл имеет вид: А) ========>

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 11:58)   письмо автору
408 байт
 
   для: MAR_NIKOZA   (23.08.2008 в 00:37)
 

Нужно получить вид: B) ========>

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 12:09)   письмо автору
 
   для: MAR_NIKOZA   (23.08.2008 в 00:37)
 

Повторюсь, что файлов (типа: А) несколько и слова в теге: strong разные.

  Ответить  
 
 автор: MAR_NIKOZA   (23.08.2008 в 12:30)   письмо автору
 
   для: Незнайка   (23.08.2008 в 12:09)
 

Не понял я Ваш образец, Незнайка.
Я понимаю так:
В файле есть тег
title
и есть тэг
strong
Нужно: Из тега strong взять содержимое и заменить этим содержимое в тэге title
При этом тэг strong остаётся без изменений. правильно?

Ладно, напишу общий авторедактор.
будет перелопачивать тысячи файлов за секунды.
Просто параметры Вам нужно будет самому задавать.
Значит задача - параметр strong вставлять впараметр title
Надеюсь, параметр strong в файле один.
Если их много, будет использоваться первый strong.

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 15:25)   письмо автору
 
   для: MAR_NIKOZA   (23.08.2008 в 12:30)
 

>>...Нужно: Из тега strong взять содержимое и заменить этим содержимое в тэге title
При этом тэг strong остаётся без изменений. правильно?

Вобщем то да, только еще нужно подставить во всех файлах в <title> Слово "Книга" потом содержимое тега strong </title>

>> Значит задача - параметр strong вставлять впараметр title
И удалять бесполезный текст из <title>

>>Надеюсь, параметр strong в файле один.
Верно, один

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 19:20)   письмо автору
 
   для: MAR_NIKOZA   (23.08.2008 в 12:30)
 

MAR_NIKOZA Вы случайно про меня не забыли?

>> Элементарно решается.
напиши алгос и запусти - тут делов на 10 минут.
Могу лично для тебя набросать подобное...

Я уже покушать успел, поспать и т.д.
P.S. Че-то похоже я Вас конкретно "загрузил". Да?

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 21:17)   письмо автору
 
   для: MAR_NIKOZA   (23.08.2008 в 12:30)
 

MAR Ау-ау, где Вы? MaaaaaaR ...
Ладно, чувствую я еще на луну успею сгонять:)

  Ответить  
 
 автор: sim5   (23.08.2008 в 15:11)   письмо автору
 
   для: Незнайка   (22.08.2008 в 20:36)
 

Я пытался с помощью рег. выражений делать замену в HomeSite, но так и не понял как это правильно делать - замена происходит, но результат не всегда верный, можно сказать даже странный. В справке примеров не нашел, кроме как описания самих выражений, после попыток уже не делал. Есть еще программа, которая может делать замену в файлах с помощью рег. выражений, вроде бы как хвалят ее, называется вроде бы EmEditor.

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 15:37)   письмо автору
 
   для: sim5   (23.08.2008 в 15:11)
 

Понятно.
Сдается мне че-то я намудрил с этими: <?php echo $title; ?>

Как писал MAR_NIKOZA "Нужно: Из тега strong взять содержимое и заменить этим содержимое в тэге title
При этом тэг strong остаётся без изменений..."

Может без: <?php echo $title; ?> обойтись, как-то?
Или не получится?

  Ответить  
 
 автор: sim5   (23.08.2008 в 15:48)   письмо автору
 
   для: Незнайка   (23.08.2008 в 15:37)
 

Я не имел ввиду именно вашу ситуацию, я вообще о замене с помошью рег. выражений в HomeSite - не получается как нужно, видимо что-то не так делал.
Что касается прямой замены, то тут бы проблем никаких бы не было, выделили:
<title>Какой-то текст</title>
указали заменить на:
<title>Книга <?php echo $title; ?></title>
и будет заменено именно на это, невзирая на <?$...?>.

  Ответить  
 
 автор: Незнайка   (23.08.2008 в 16:00)   письмо автору
 
   для: sim5   (23.08.2008 в 15:48)
 

Ясно.
Если бы прямая замена, то конечно...

  Ответить  
 
 автор: MAR_NIKOZA   (23.08.2008 в 23:08)   письмо автору
 
   для: Незнайка   (23.08.2008 в 16:00)
 

Я тута. Только освободился - работал. Сейчас займусь.

  Ответить  
 
 автор: xx77   (23.08.2008 в 23:52)   письмо автору
 
   для: Незнайка   (23.08.2008 в 16:00)
 

лучше не подстраиваться под всевозможные редакторы , а поставить "денвер",
и юзать скрипты, как например такой
<pre><?
$text 
file_get_contents('57062-20080823115634.txt'); 

$text preg_replace('#<title>([^<]*)(.+?<strong>)([^<]*)</strong>#s',
    
'<?php
\$title = \'$3\';
?>
<title><?php echo \$title ?>$2<?php echo \$title ?></strong>'
,
    
$text,
    
);
print 
htmlspecialchars($text);
?></pre>

и так-же легко можно сделать обход папок с файлами в которых нужно проделать такое
,,, и много чего ещё









UPD://
Всётаки лучще-бы звучало
>для пользователя "Незнайка"

хоть и больше байт

  Ответить  
 
 автор: Незнайка   (24.08.2008 в 11:06)   письмо автору
 
   для: xx77   (23.08.2008 в 23:52)
 

Спасибо.


>> Всётаки лучще-бы звучало
>для пользователя "Незнайка"

Согласен, правда чем длиннее надпись перед тем кому написано тем больше отвлекает (приходится как бы все время читать "для пользователя" потом кому адресовано) на мой взгляд. А если бы например, было:

автор: Незнайка (23.08.2008 в 23:52)
Вам: xx77 (и тут бы небыло даты и врем. которые тоже отвлекают внимание)

Было бы коротко и ясно.
Что Вы об этом думаете? :)

  Ответить  
 
 автор: Незнайка   (24.08.2008 в 13:05)   письмо автору
 
   для: xx77   (23.08.2008 в 23:52)
 

Работает. Спасибо.

>>,,, и много чего ещё

А можно ли сделать так, чтобы "пройтись" по всем всем файлам html "взять" из тега <strong > содержимое, поместив его в тег <title> (удалив содержимое тега <title>) и сохранить изменения в файлах?

  Ответить  
 
 автор: xx77   (24.08.2008 в 19:51)   письмо автору
 
   для: Незнайка   (24.08.2008 в 13:05)
 

примерно похоже на это
, плюс настроить как Вам нужно создания резервных копий в целях безопасности
, и удаление их в случае ненадобности
<pre><?php
ini_set
('max_execution_time'0);

list(
$m$time) = sscanf(microtime(), '0%s %s');
$time .= $m# время начала выполнения

$search '#<title>([^<]*)(.+?<strong>)([^<]*)</strong>#s'
# шаблон поиска
$repla '<?php 
\$title = \'$3\'; 
?> 
<title><?php echo \$title ?>$2<?php echo \$title ?></strong>'
;
# строка замены
//замена частоприменяемым способеом обхода дерева каталогов при помощи рекурсивной функции 

function RepFiles$directory # функция
{
  global 
$search$repla;
    
$dir opendir$directory ); 

while(
$file readdir($dir)) 
{
if (
is_file($directory '/' $file) && substr($file, -5) == '.html') {
   
$txt file_get_contents($directory '/' $file); # текст файла
   
@rename($directory '/' $file$directory '/' $file '.bak'); # переименование , создание резервных копий файлов
   
  
if (file_put_contents($directory '/' $file
    
preg_replace($search$repla$txt))) echo $directory '/' $file ' перезаписан<br>' "\n";  # запись в файл.
    
else echo $directory '/' $file ' <b> ошибка записи в файл</b>' "\n";
} else if (
is_dir($directory '/' $file) && ($file != ".") && ($file != "..")) {
  
RepFiles($directory '/' $file); #или  рекурсия.
}
}
closedir$dir ) ;  
echo 
'<hr/>';
}


RepFiles'.' ) ; # вызов функции замены во всех html-файлах в текущей и вложенных в неё дирректориях


list($m$t) = sscanf(microtime(), '0%s %s');
print 
'<hr/>' . (($t .= $m) - $time) . "\n"# время выполнения
?></pre>

не проверял, и требует прав доступа на запись в папку, если на хостинге,
и php5 , для file_put_contents()

  Ответить  
 
 автор: Незнайка   (24.08.2008 в 19:54)   письмо автору
 
   для: xx77   (24.08.2008 в 19:51)
 

Спасибо.
А если у меня "Денвер", что-то нужно настраивать, нет?

  Ответить  
 
 автор: Незнайка   (24.08.2008 в 20:24)   письмо автору
 
   для: xx77   (24.08.2008 в 19:51)
 

Что-то не получилось....
Правильно ли я делал?
Положил Ваш скрипт (назвав его: zamena.php) в папку (например): file и запустил.
В папке file имеются папки: file1, file2, file3 и т.п. в этих папках ( file1, file2, file3 и т.п.) лежат HTML документы: html1, html2, html3 и т.д.

Набрал в брауз.: http://localhost/file/zamena.php
В результате, полоски по всей стр. и запись в углу стр.: 2.1106197834

Что я делаю неправильно?

  Ответить  
 
 автор: xx77   (24.08.2008 в 22:16)   письмо автору
 
   для: Незнайка   (24.08.2008 в 20:24)
 

просто проверяется условие substr($file, -5) == '.html'
и похоже на то что в папках не содержится не одного файла , с расширением html маленькими буквами

на денвере работает так как есть.
каждый разделитель - это один вызов функции, папка значит.
цифры - время работы скрипта в секундах

если не нужно проходить по вложенным папкам , закомментируйте часть функции
 else if (is_dir($directory . '/' . $file) && ($file != ".") && ($file != "..")) {
  RepFiles($directory . '/' . $file); #или  рекурсия.
}

  Ответить  
 
 автор: Незнайка   (25.08.2008 в 09:53)   письмо автору
 
   для: xx77   (24.08.2008 в 22:16)
 

Действительно в папках не содержится не одного файла , с расширением html, зато имеется htm :)))
Я заменил на htm, но увы, результат тот же.... Может что-то еще нужно сделать?
if (is_file($directory . '/' . $file) && substr($file, -5) == '.htm') {


P.S. Кстати все htm файлы в папках имеют имя: default.htm, если это важно?..

  Ответить  
 
 автор: Trianon   (25.08.2008 в 09:56)   письмо автору
 
   для: Незнайка   (25.08.2008 в 09:53)
 

Еще нужно понять код, перед тем как его [при]менять.
substr($file, -5) означает последние пять символов стоки $file
Вы сравниваете не '.html', а '.htm'? Угу?

  Ответить  
 
 автор: Незнайка   (25.08.2008 в 10:09)   письмо автору
 
   для: Trianon   (25.08.2008 в 09:56)
 

>>Еще нужно понять код, перед тем как его [при]менять.
С этим не поспоришь :)
Может подскажете, как и что нужно [при]менять, а то я сам че-то никак?

  Ответить  
 
 автор: Trianon   (25.08.2008 в 10:16)   письмо автору
 
   для: Незнайка   (25.08.2008 в 10:09)
 

Касательно менять - подсказал.
Во второй и третьей строках.
Касательно применять - увы. Может быть автор кода подскажет.

  Ответить  
 
 автор: Незнайка   (25.08.2008 в 10:22)   письмо автору
 
   для: Trianon   (25.08.2008 в 10:16)
 

Спасибо :)

  Ответить  
 
 автор: Незнайка   (25.08.2008 в 14:15)   письмо автору
 
   для: Незнайка   (25.08.2008 в 10:22)
 

Никто MAR_NIKOZA не видел? А то уже вторые сутки пошли, ни слуху, ни духу. Может случилось что?..

P.S. Если, кто встретит скажите незнайка искал :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования