АРМАДА
Замена в тексте по списку
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

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


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


Нужно: заменить в исходном тексте слог "ва" на слова поочереди из списка.
Подскажите декстопный софт, или может можно сделать в экселе?

GetLucky
Свой
Зарегистрирован: 08.08.2008
Сообщений: 14
Обратиться по нику
# Добавлено:Вт Авг 26, 2008 11:01 amОтветить с цитатой
Как умею накидал на 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


sydoow
V.I.P.
Зарегистрирован: 29.06.2007
Сообщений: 8213
Обратиться по нику
# Добавлено:Вт Авг 26, 2008 4:15 pmОтветить с цитатой
Спасибо большое! Попробуем Smile

GetLucky
Свой
Зарегистрирован: 08.08.2008
Сообщений: 14
Обратиться по нику
# Добавлено:Вт Авг 26, 2008 5:39 pmОтветить с цитатой
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


С этим кодом "ва" может спокойно присутствовать в списке и тронуто не будет.

pepper
Опытный
Зарегистрирован: 10.04.2008
Сообщений: 184
Обратиться по нику
# Добавлено:Вт Авг 26, 2008 6:26 pmОтветить с цитатой
Многие операции со строками удобно производить с помощью TextPipe или же самописными и не очень скриптами.

sydoow
V.I.P.
Зарегистрирован: 29.06.2007
Сообщений: 8213
Обратиться по нику
# Добавлено:Вт Авг 26, 2008 10:15 pmОтветить с цитатой
GetLucky, объясни плиз как этим пользоваться?
Я скачал Ruby, установил, запустил, вставил твой код, а дальше куда жать? )

sydoow
V.I.P.
Зарегистрирован: 29.06.2007
Сообщений: 8213
Обратиться по нику
# Добавлено:Вт Авг 26, 2008 10:32 pmОтветить с цитатой
РАЗОБРАЛСЯ САМ!! SmileSmileSmile

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

Спасибо ещё раз, опробовал, всё работает)

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

Upd. Чуток запоздал Smile
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры