Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/133: Рейтинг темы: голосов - 133, средняя оценка - 4.52
0 / 0 / 1
Регистрация: 04.04.2009
Сообщений: 12
1

Заменить слова в тектовом файле

01.09.2009, 23:03. Показов 24697. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста создать скрипт, который берет данные из одного txt файла, заменяет некоторые слова и вставляет в другой txt файл.
Здесь же на форуме нашел такой код:
PHP
1
2
3
4
5
6
$file = fopen('filename.xml', 'r');
$text = fread($file, filesize('filename.xml'));
fclose($file);
$file = fopen('filename.xml', 'w');
fwrite($file, str_replace('</INVENTORY>', '', $text));
fclose($file);
Всё работает, только мне надо изменить его чтобы поиск и замена происходила по нескольким словам. помогите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2009, 23:03
Ответы с готовыми решениями:

Сохранение и чтение из Datagridview в тектовом файле
Подскажите мне надо сделать так что бы данные из Datagridview сохранялись в папку f1 и названия...

Удление всего кроме нужной подстроки в тектовом файле
Здравствуйте! Из proxycfg нужно вытащить только прокси в формате 11.11.11.11:80 Сам proxycfg...

Найти в файле F1 все заменяемые слова и заменить их на соответствующие заменяющие слова
1.Задан типизированный файл с целочисленными компонентами и произвольное целое число b. Если для...

В файле F заменить на звездочку(*) слова в которых нету букв слова "word"
В файле F заменить на звездочку(*) слова в которых нету букв слова &quot;word&quot; #include &lt;stdio.h&gt;...

9
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
01.09.2009, 23:14 2
Вот здесь происходит замена:
PHP
1
str_replace('</INVENTORY>', '', $text)
Чтобы выглядело более понятно можно расписать так:
PHP
1
2
3
4
5
6
7
8
9
$file = fopen('filename.xml', 'r');
$text = fread($file, filesize('filename.xml'));
fclose($file);
$file = fopen('filename.xml', 'w');
$text = str_replace('</INVENTORY>', '', $text);
$text = str_replace('что заменяем', 'на что заменяем', $text);
...
fwrite($file, $text);
fclose($file);
1
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
16.06.2010, 20:04 3
Цитата Сообщение от FunDuck Посмотреть сообщение
Вот здесь происходит замена:
PHP
1
str_replace('</INVENTORY>', '', $text)
Чтобы выглядело более понятно можно расписать так:
PHP
1
2
3
4
5
6
7
8
9
$file = fopen('filename.xml', 'r');
$text = fread($file, filesize('filename.xml'));
fclose($file);
$file = fopen('filename.xml', 'w');
$text = str_replace('</INVENTORY>', '', $text);
$text = str_replace('что заменяем', 'на что заменяем', $text);
...
fwrite($file, $text);
fclose($file);
Простите, а как сделать так, чтобы замены (на что заменяем) брались из другого файла (где одна строка = одна замена) и вставлялись последовательно в каждую строку первого файла, удовлетворяющую условию "строка заключена в теги <loc></loc>?
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
17.06.2010, 17:33 4
PHP
1
2
3
4
5
$result = strtr($text, array(
    'слово1' => 'на слово 1',
    'слово2' => 'на слово 2',
    # ...
));
Добавлено через 8 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$F = file('файл с описанием замены.txt');
$Replacement = array();
if ($F) {
    foreach ($F as $line) {
        $w = explode('=', strtolower($line), 2);
        if (count($w) == 2) $Replacement[trim($w[0])] = trim($w[1]);
    }
}
 
$text = file_get_contents('source.xml');
$result = preg_replace_callback('~(<loc>)([^<]+)(</loc>)~i', 'my_replace_callback', $text);
file_put_contents('result.xml', $result, LOCK_EX);
 
function my_replace_callback($m) {
    global $Replacement;
    $w = strtolower(trim($m[2]));
    if (isset($Replacement[$w])) $w = htmlspecialchars($Replacement[$w]);
    return $m[1] . $w . $m[3];
}
Добавлено через 2 минуты
Предполагается, что файл с описанием замен имеет следующий вид:
Код
что искать=на что заменять
ааа=ббб
ййй=ццц
0
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 19:02 5
Там 1050 замен, поэтому на составление файла с описанием замен уйдёт столько же времени, что и на выполнение всех необходимых замен в файлах вручную.
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
17.06.2010, 19:29 6
А как иначе? Как определить, что на что заменять? Или там есть какие-то закономерности?
0
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
17.06.2010, 19:32 7
Как определить, что заменять: заменяем только то, что внутри тегов <loc> первого файла (там url-ы)
Как определить, на что это заменять: последовательно на каждую следующую строку из текстового файла "1000links.txt"
Порядок замены не важен
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
18.06.2010, 17:02 8
Модифицируем вышеупомянутый код и получается
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$Replacement = file('файл с описанием замены.txt');
if ($Replacement===false) {
    echo 'Не удалось прочитать файл с заменами';
    $Replacement = array();
}
 
$text = file_get_contents('source.xml');
$result = preg_replace_callback('~(<loc>)([^<]+)(</loc>)~i', 'my_replace_callback', $text);
file_put_contents('result.xml', $result, LOCK_EX);
 
function my_replace_callback($m) {
    global $Replacement;
    static $Index = 0;
    if (isset($Replacement[$Index])) $m[2] = htmlspecialchars($Replacement[$Index]);
    $Index++;
    return $m[1] . $m[2] . $m[3];
}
Не проверял, но должно работать.

А что, если в файле с заменами не хватит слов для замены?
1
0 / 0 / 0
Регистрация: 16.06.2010
Сообщений: 4
18.06.2010, 22:50 9
Всё работает, спасибо! Отлично и без замечаний. Файл с заменами оказался меньше исходного, в результате после того, как замены кончились, остальные строки остались без изменений. Как и ожидалось
Ещё раз большое спасибо за помощь!
0
0 / 0 / 0
Регистрация: 13.10.2015
Сообщений: 1
13.10.2015, 10:53 10
Люди добрые! А как заставить этот скрипт не выполняться каждый раз, если условие уже выполнено и замена значений произошла? А то он при каждой перезагрузке страницы дописывает к уже измененному значению еще одно. Например, было frame, переписали на frame1, затем перезагрузка страницы и имеем уже frame11.
PHP
1
2
3
4
5
6
7
8
9
$file = fopen('filename.xml', 'r');
$text = fread($file, filesize('filename.xml'));
fclose($file);
$file = fopen('filename.xml', 'w');
$text = str_replace('</INVENTORY>', '', $text);
$text = str_replace('что заменяем', 'на что заменяем', $text);
...
fwrite($file, $text);
fclose($file);
0
13.10.2015, 10:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2015, 10:53
Помогаю со студенческими работами здесь

Заменить в файле слова синонимами
даны 2 текстовых файла f1 и f2 файл f1 содержит произольный текст. слова в файле разделены...

В файле заменить 4 разные слова
Надо в файле заменить 4 разные слова. как это сделать... Можно ли это сделать как тов массиве...

В файле заменить все слова максимальной длины на слова минимальной длины
Нужно в считанном из файла тексте заменить все слова максимальной длины на слова минимальной длины,...

Заменить в файле те слова, которые можно, их синонимами
Даны два текстовых файла f1 и f2. Файл f1 содержит произвольный текст. Слова в тексте разделены...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru