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

Dion
Свой
Зарегистрирован: 15.09.2008
Сообщений: 3
Обратиться по нику
# Добавлено:Вт Сен 16, 2008 1:55 pmДобавить в избранноеОтветить с цитатой
Нужен скриптик на руби, что бы он из текстового файла (напр. in.txt) вставлял произвольную строку в другой файл (out.txt) вместо определенного слова (напр. test1)

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


Dion
Свой
Зарегистрирован: 15.09.2008
Сообщений: 3
Обратиться по нику
# Добавлено:Ср Сен 17, 2008 9:48 amОтветить с цитатой
Спасибо GetLucky то что нужно, только вот если в файле(out.txt) несколько слов test1 то скрипт заменяет на одинаковые значения из файла(in.txt), а хотелось что бы он вставлял разные строки.

GetLucky
Свой
Зарегистрирован: 08.08.2008
Сообщений: 14
Обратиться по нику
# Добавлено:Ср Сен 17, 2008 11:11 amОтветить с цитатой
Пожалуйста 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 раз

Вацлав
Сетевой Гугляка
Зарегистрирован: 21.02.2006
Сообщений: 4965
Обратиться по нику
# Добавлено:Ср Сен 17, 2008 11:13 amОтветить с цитатой
О! Рубероидов становится на форуме больше! Smile
Второе пришествие Вацлава. Камингсуново.

GetLucky
Свой
Зарегистрирован: 08.08.2008
Сообщений: 14
Обратиться по нику
# Добавлено:Ср Сен 17, 2008 11:35 amОтветить с цитатой
Не без твоего участия Вацлав Wink

Dion
Свой
Зарегистрирован: 15.09.2008
Сообщений: 3
Обратиться по нику
# Добавлено:Ср Сен 17, 2008 3:52 pmОтветить с цитатой
Спасибо GetLucky все работает
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





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



Партнеры