Как использовать gsub с файлом в Ruby? - PullRequest
0 голосов
/ 26 апреля 2019

Эй, у меня небольшая проблема, у меня есть строковый массив text_word, и я хочу заменить некоторые буквы моим файлом transform.txt, мой файл выглядит так:

/t/ 3

/$/ 1

/a/ !

Но когда яиспользую gsub я получаю Enumerator обратно, кто-нибудь знает как это исправить?

text_transform= Array.new
new_words= Array.new
File.open("transform.txt", "r") do |fi|
  fi.each_line do |words|
    text_transform << words.chomp
  end
end

text_transform.each do |transform|
  text_word.each do |words|
    new_words << words.gsub(transform)
  end
end

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Вы можете увидеть String#gsub

Если вторым аргументом является Hash, а совпадающий текст является одним из его ключей, соответствующее значение является заменойстрока.

Также вы можете использовать IO::readlines

File.readlines('transform.txt', chomp: true).map { |word| word.gsub(/[t$a]/, 't' => 3, '$' => 1, 'a' => '!') }
1 голос
/ 26 апреля 2019

gsub возвращает Enumerator, когда вы предоставляете только один аргумент (шаблон).Если вы хотите заменить, просто добавьте строку замены:

pry(main)> 'this is my string'.gsub(/i/, '1')
"th1s 1s my str1ng"

Вам необходимо изменить код:

text_transform = Array.new
new_words = Array.new
File.open("transform.txt", "r") do |fi|
  fi.each_line do |words|
    text_transform << words.chomp.strip.split # "/t/ 3" -> ["/t/", "3"]
  end
end

text_transform.each do |pattern, replacement| # pattern = "/t/", replacement = "3"
  text_word.each do |words|
    new_words << words.gsub(pattern, replacement)
  end
end
...