Я новичок в Ruby. У меня есть образец (ввод текста), как:Ruby: копировать два ряда
Message:
update attributes in file and commit version
----
Modified
мне нужно поставить в соответствие строку после «сообщение» тега. Обратите внимание, что эта строка может быть и близко с «сообщение», как
Message:update attributes in file and commit version
Я пробовал так:
if line =~/Message/
Но, конечно, это не поиск следующей строки.
Может кто-нибудь помочь мне, как поймать строк между тегами «Message» и «---» Если вы знаете, некоторые примеры, пожалуйста, введите ссылку
Update: весь код
require 'csv'
data = []
File.foreach("new7.txt") do |line|
line.chomp!
if line =~ /Revision/
data.push [line]
elsif line =~ /Author/
if data.last and not data.last[1]
data.last[1] = line
else
data.push [nil, line]
end
elsif line=~/^Message:(.*)^-/m
if data.last and not data.last[2]
data.last[2] = line
else
data.push [nil, nil, line]
end
end
end
CSV.open('new1.csv', 'w') do |csv|
data.each do |record|
csv << record
end
enter code here
ввода файл:
Revision: 37407
Author: imakarov
Date: 21 июня 2013 г. 10:23:28
Message:my infomation
dmitry name
Выход CSV файл:
Я только что проверил и другие подобные вопросы были заданы/ответили на SO. Вы сначала искали? Мне интересно, следует ли отмечать это как дублирующее, или если что-то мешало вам найти его. –
@PeterAlfin большое спасибо! Но верно ли это, если я использую это выражение следующим образом: if line = ~/^ Message: (. *)^-/Несчастливо он не работает –
Нет, вам нужно 'm' в конце регулярного выражения (после конечная косая черта). Это ключевой фактор. –