Помогите со скриптом ruby
Новая тема Написать ответ
# Вт Сен 16, 2008 1:55 pmDion Зарег.: 15.09.2008 ; Сообщ.: 3Ответить с цитатой
Нужен скриптик на руби, что бы он из текстового файла (напр. in.txt) вставлял произвольную строку в другой файл (out.txt) вместо определенного слова (напр. test1)
# Вт Сен 16, 2008 4:10 pmGetLucky Зарег.: 08.08.2008 ; Сообщ.: 14Ответить с цитатой
Вот держи Smile

Код:

subs = "test1" # Заменяемое слово
lines = IO.readlines("in.txt")
text = IO.read("out.txt")
resultText = ""
resultFile = File.open("out.txt", "w")
charIndex = 0
lineIndex = rand(lines.length)
while charIndex < text.length
  if text[charIndex,subs.length] == subs
    resultText = resultText + lines[lineIndex].chomp
    charIndex = charIndex + subs.length
  else
    resultText = resultText + text[charIndex,1]
    charIndex = charIndex + 1
  end
end
resultFile.print(resultText)
resultFile.close

# Ср Сен 17, 2008 9:48 amDion Зарег.: 15.09.2008 ; Сообщ.: 3Ответить с цитатой
Спасибо GetLucky то что нужно, только вот если в файле(out.txt) несколько слов test1 то скрипт заменяет на одинаковые значения из файла(in.txt), а хотелось что бы он вставлял разные строки.
# Ср Сен 17, 2008 11:11 amGetLucky Зарег.: 08.08.2008 ; Сообщ.: 14Ответить с цитатой
Пожалуйста Drinks or Beer

Тогда вот так:
Код:

subs = "test1" # Заменяемое слово
lines = IO.readlines("in.txt")
text = IO.read("out.txt")
resultText = ""
resultFile = File.open("out.txt", "w")
charIndex = 0
while charIndex < text.length
  if text[charIndex,subs.length] == subs
    resultText = resultText + lines[rand(lines.length)].chomp
    charIndex = charIndex + subs.length
  else
    resultText = resultText + text[charIndex,1]
    charIndex = charIndex + 1
  end
end
resultFile.print(resultText)
resultFile.close


Для каждой замены берётся случайная строка из in.txt, но она необязательно будет уникальной.

Если критична уникальность, то тогда так:
Код:

subs = "test1" # Заменяемое слово
lines = IO.readlines("in.txt")
text = IO.read("out.txt")
resultText = ""
resultFile = File.open("out.txt", "w")
charIndex = 0
while charIndex < text.length
  if text[charIndex,subs.length] == subs
    currentLine = lines[rand(lines.length)]
    resultText = resultText + currentLine.chomp
    if lines.length > 1
      lines.delete(currentLine)
    else
      lines = IO.readlines("in.txt")
    end
    charIndex = charIndex + subs.length
  else
    resultText = resultText + text[charIndex,1]
    charIndex = charIndex + 1
  end
end
resultFile.print(resultText)
resultFile.close


Этот скрипт выбирает случайную строку, заменяет ею слово, а затем удаляет её из списка (если есть в списке ещё такие же строки - их тоже прибьёт). Затем всё повторяется. Если строки закончатся раньше времени, то список будет восстановлен в исходное положение.


Последний раз редактировалось: GetLucky (Ср Сен 17, 2008 11:30 am), всего редактировалось 1 раз
# Ср Сен 17, 2008 11:13 amВацлав Зарег.: 21.02.2006 ; Сообщ.: 4965Ответить с цитатой
О! Рубероидов становится на форуме больше! Smile
# Ср Сен 17, 2008 11:35 amGetLucky Зарег.: 08.08.2008 ; Сообщ.: 14Ответить с цитатой
Не без твоего участия Вацлав Wink
# Ср Сен 17, 2008 3:52 pmDion Зарег.: 15.09.2008 ; Сообщ.: 3Ответить с цитатой
Спасибо GetLucky все работает
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.