Новичок: замена текста в моем случае

#ruby-on-rails #ruby #ruby-on-rails-3 #ruby-on-rails-3.1

#ruby-on-rails #ruby #ruby-on-rails-3 #ruby-on-rails-3.1

Вопрос:

В моем приложении Ruby on Rails в моем помощнике есть метод, который открывает файл с помощью:

 content = File.open(myfile.txt)
 

Содержимое файла похоже:

 my.car , my.seat, my.age;
my.son , my.dog, my.chair;
...
 

Итак, я разделил содержимое на «;» следующим образом:

 content.split(';').each do |line|
      #Here, I want to replace the text from "my" to "her" on each line
end
 

Как заменить «мое» в каждой строке на «ее» в содержании?

это для обновления содержимого до:

 her.car , her.seat, her.age;
her.son , her.dog, her.chair;
...
 

————————— обновить ———————————

Я хотел бы обновить содержимое открытого файла, а не только заменить строку при чтении содержимого из кода ruby.

Комментарии:

1. Это действительно простой вопрос, поиск в Интернете «замена текста на ruby» дал бы вам всю необходимую информацию. Пожалуйста, изучите, прежде чем задавать вопросы.

2. Я неправильно выразился в своем сообщении, я имею в виду, что хотел бы обновить содержимое открытого файла, а не только заменить строку

Ответ №1:

Невозможно изменить содержимое файла «на лету«. Файлы можно только добавлять, их нельзя расширять, поэтому вы не можете заменить my на her .

Вы можете начать с этого базового кода:

 buf = ""

File.open('myfile.txt') do |file|
    file.readlines.each do |line|
        buf << line.gsub('my', "her")
    end
end

File.open('myfile.txt', 'w') do |file|
    file << buf
end
 

Ответ №2:

 line.gsub!(/my/, "her")
 

Хотя вы можете захотеть уточнить регулярное выражение, например

 line.gsub!(/bmy./, "her")
 

Комментарии:

1. В чем разница между gsub и gsub! ?

2. .gsub! заменяет саму строку

3. Я пробовал, он заменяет строку, НО содержимое файла не меняется. Я хотел бы обновить содержимое открытого файла…

4. если файл не слишком большой, считайте его в память, делая замены по ходу, а когда закончите, запишите файл обратно. В некоторых случаях это тяжелый вес, но если ваши файлы достаточно малы, это не ужасное решение. Я бы с осторожностью заменял вещи по частям … если ваш процесс остановится, и вы обработали половину файла, у вас могут возникнуть проблемы. Однако сбор выходных данных, а затем запись, по крайней мере, сужает окно для возникновения подобных проблем.