[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как строкой из одного файла заменить слово в друго
Страницы: 1, 2
avantus
Грубо говоря есть файл1 с содержанием:
слово слово 123 слово слово
слово 123 слово слово слово
123 слово слово слово слово
слово слово слово 123 слово
слово слово слово слово 123

и есть файл2 с содержанием:
111
222
333

Как в файл1 вместо 123 в каждую строку подставить данные из строки файла2, так чтобы если в файле2 закончатся строки, данные начали браться с первой строки.

Должно выйти что-то типа:
слово слово 111 слово слово
слово 222 слово слово слово
333 слово слово слово слово
слово слово слово 111 слово
слово слово слово слово 222

Помогите, плиз.
F**k
Написать за тебя в смысле?
McLotos
Читаешь оба файла построчно в массив, а дальше регуляркой делаешь замену.
preg_replace

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
avantus
Цитата (F**k @ 11.01.2015 - 11:00)
Написать за тебя в смысле?

Буду благодарен если напишите.
F**k
Ну попробуй этот кусок:

$text = file_get_contents('file.txt'); // файл с текстом
$words = explode(PHP_EOL, file_get_contents('words.txt')); // файл со словами-заменой
array_pop($words);

$to_replace = '123'; // слово, которое нужно заменять
$current_word_idx = 0;
$pos = 0;
while($pos = mb_strpos($text, $to_replace, $pos, 'UTF-8')) {
$text = mb_substr_replace($text, $words[$current_word_idx ], $pos, mb_strlen($words[$current_word_idx ], 'UTF-8'));
$current_word_idx = ++$current_word_idx % count($words);
}

echo $text;

/*-----------------------------------------------------------------------*/

function mb_substr_replace($string, $replacement, $start, $length=NULL) {
if (is_array($string)) {
$num = count($string);
// $replacement
$replacement = is_array($replacement) ? array_slice($replacement, 0, $num) : array_pad(array($replacement), $num, $replacement);
// $start
if (is_array($start)) {
$start = array_slice($start, 0, $num);
foreach ($start as $key => $value)
$start[$key] = is_int($value) ? $value : 0;
}
else {
$start = array_pad(array($start), $num, $start);
}
// $length
if (!isset($length)) {
$length = array_fill(0, $num, 0);
}
elseif (is_array($length)) {
$length = array_slice($length, 0, $num);
foreach ($length as $key => $value)
$length[$key] = isset($value) ? (is_int($value) ? $value : $num) : 0;
}
else {
$length = array_pad(array($length), $num, $length);
}
// Recursive call
return array_map(__FUNCTION__, $string, $replacement, $start, $length);
}
preg_match_all('/./us', (string)$string, $smatches);
preg_match_all('/./us', (string)$replacement, $rmatches);
if ($length === NULL) $length = mb_strlen($string);
array_splice($smatches[0], $start, $length, $rmatches[0]);
return join($smatches[0]);
}

Proof of concept: http://ideone.com/XlCJB4
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.