Замена в тексте по списку
Новая тема Написать ответ
# Вт Авг 26, 2008 2:42 amsydoow Зарег.: 29.06.2007 ; Сообщ.: 8213Ответить с цитатой
Пример: есть текст
Код:
фыщгафыаорицдзутвао ыва ывап ытьвапцук цыавим ыфвашпц ыаип ыардовп итыварыв даэыьвп мывазжв ыаывщо апцуешцхетц пцип лывапт дыарпцэцлукпцоп ыжавп ывп ывщп2цьэпжп ваыщпэыпл цэы


есть список слов
Код:
вася
петя
маша
катя
гриша
тимофей


Нужно: заменить в исходном тексте слог "ва" на слова поочереди из списка.
Подскажите декстопный софт, или может можно сделать в экселе?
# Вт Авг 26, 2008 11:01 amGetLucky Зарег.: 08.08.2008 ; Сообщ.: 14Ответить с цитатой
Как умею накидал на Ruby Smile
Для исполнения скачай http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
В коде исправь значение subs на нужное слово для замены.
В файле text.txt - текст
В файле words.txt - список слов
Если слова заканчиваются, замена продолжается с первого слова.
Результат запишется в result.txt

Файл soft.rb
Код:

subs = "ва" # Замена
words = IO.readlines("words.txt")
text = IO.read("text.txt")
resultFile = File.open("result.txt", "w")
charIndex = 0
wordIndex = 0
while charIndex < text.length
  if text[charIndex,subs.length] == subs
    if wordIndex >= words.length
      wordIndex = 0
    end
    text[charIndex,subs.length] = words[wordIndex].chomp
    wordIndex = wordIndex + 1
  end
  charIndex = charIndex + 1
end
resultFile.print(text)
resultFile.close

# Вт Авг 26, 2008 4:15 pmsydoow Зарег.: 29.06.2007 ; Сообщ.: 8213Ответить с цитатой
Спасибо большое! Попробуем Smile
# Вт Авг 26, 2008 5:39 pmGetLucky Зарег.: 08.08.2008 ; Сообщ.: 14Ответить с цитатой
sydoow, Drinks or Beer рад помочь!
Я тут поторопился и не учитывал тот вариант, что заменяемое "ва" может входить в одно из слов списка, в итоге замена пройдёт по уже вставленному слову. Исправляюсь:
Код:

subs = "ва" # Замена
words = IO.readlines("words.txt")
text = IO.read("text.txt")
resultText = ""
resultFile = File.open("result.txt", "w")
charIndex = 0
wordIndex = 0
while charIndex < text.length
  if text[charIndex,subs.length] == subs
    if wordIndex >= words.length
      wordIndex = 0
    end
    resultText = resultText + words[wordIndex].chomp
    wordIndex = wordIndex + 1
    charIndex = charIndex + subs.length
  else
    resultText = resultText + text[charIndex,1]
    charIndex = charIndex + 1
  end
end
resultFile.print(resultText)
resultFile.close


С этим кодом "ва" может спокойно присутствовать в списке и тронуто не будет.
# Вт Авг 26, 2008 6:26 pmpepper Зарег.: 10.04.2008 ; Сообщ.: 184Ответить с цитатой
Многие операции со строками удобно производить с помощью TextPipe или же самописными и не очень скриптами.
# Вт Авг 26, 2008 10:15 pmsydoow Зарег.: 29.06.2007 ; Сообщ.: 8213Ответить с цитатой
GetLucky, объясни плиз как этим пользоваться?
Я скачал Ruby, установил, запустил, вставил твой код, а дальше куда жать? )
# Вт Авг 26, 2008 10:32 pmsydoow Зарег.: 29.06.2007 ; Сообщ.: 8213Ответить с цитатой
РАЗОБРАЛСЯ САМ!! SmileSmileSmile

Сохраняешь вышеуказанный код в текстовый файл, потом делаешь расширение "*.rb" и все ОК Wink

Спасибо ещё раз, опробовал, всё работает)
# Вт Авг 26, 2008 10:40 pmGetLucky Зарег.: 08.08.2008 ; Сообщ.: 14Ответить с цитатой
После установки Ruby скрипты с расширением .rb должны стать исполняемыми, у них ещё иконка появится.
Так вот, создай файл soft.rb (обычный текстовый, но с rb расширением) и в него вставь код скрипта. Для удобства делай всё в отдельной папке.
Затем создай файлы text.txt (с текстом) и words.txt (со словами) в той же папке. Всё. Можно запустить soft.rb и в этой же папке забирать результат из только что создавшегося result.txt (его можно не удалять, он будет при следующем использовании с нуля перезаписываться).
Если что не понятно, пиши.

Upd. Чуток запоздал Smile
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.