Добавить строку heredoc после определенной строки heredoc, если файл не содержит эту строку heredoc? - PullRequest
0 голосов
/ 11 сентября 2010

Я хочу добавить строку heredoc после определенной строки heredoc, если файл ее еще не содержит.

Например.

Вот 2 файла:

# file1
Description:
  I am a coder
Username: user1
Password: password1

# file2
Description:
  I am a coder
Username: user2
Password: password2
Address:
  Email: user@gmail.com
  Street: user street 19 A

Я хочу добавить:

Address:
  Email: user@gmail.com
  Street: user street 19 A

, если файл не содержит его, и после:

Description:
  I am a coder

Так что в приведенных выше файлах он будет добавлен только к первому. и этот файл будет выглядеть так:

# file1
Description:
  I am a coder
Address:
  Email: user@gmail.com
  Street: user street 19 A
Username: user1
Password: password1

Как я мог сделать это в Ruby?

1 Ответ

1 голос
/ 05 мая 2011

Вопрос плохо сформулирован - вы путаете понятие «вот документы».

Я оставлю немного кода, который, надеюсь, поможет в вашей задаче, каким-то образом

end_of_line_delimiter = "\n"
file1_arr = File.read('file1.txt').split(end_of_line_delimiter)  #Array of lines
file1_has_address = file1_arr.index {|a_line| a_line =~ /^Address:/ }

unless file1_has_address
  #file1 does not contain "Address:"
  #Build address_txt
  email       = "some@email"
  street      = "some street"
  address_txt = <<END
Address:
  Email:  #{email}
  Street: #{street}
END
  #Insert address_txt 2 lines after the "Description:" line
  description_line_index = file1_arr.index {|a_line| a_line =~ /^Description:/ }
  raise "Trying to insert address, but 'Description:' line was not found!" unless description_line_index
  insert_line_index = description_line_index + 2
  file1_arr.insert(insert_line_index, *address_txt.split(end_of_line_delimiter))

end

#file1_arr will now have any Address needed added
file1_txt = file1_arr.join(end_of_line_delimiter) 

puts file1_txt

Пожалуйста, сообщите о любом успехе с кодом:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...