我是Ruby的新手,我有以下代码:
out_file = File.open('new1.csv', 'w')
File.open("new7.txt").each do |line|
if line =~ /Revision/ then
out_file.puts line
elsif
line =~ /Author/ then
out_file.puts line
elsif
line =~ /Date/ then
out_file.puts line
end
end
我需要:
有人能告诉我如何按照描述将数据放入列中吗?
现在所有行都放在一行。
“new7.txt”的样本
Revision: 37407
Author: imakarov
Date: 21 June 2013 г. 10:23:28
Message:
update specification from Jhon (it was in VTBSOATST-1219)
----
Added : /Analitics/Документы/ЧТЗ/BR-5610/2 Спецификации/BR-5610 Публикация клиентских данных в АБС Бисквит (CifOraSyncOffPers).docx
Deleted : /Analitics/Документы/ЧТЗ/BR-5610/2 Спецификации/BR-5610 Публикация клиентских данных в АБС Бисквит.docx
Revision: 37406
Author: imakarov
Date: 21 June 2013 г. 10:22:16
Message:
delete files
----
Deleted : /Analitics/Документы/ЧТЗ/BR-5610/2 Спецификации/ЧТЗ Принудительное обновление и публикация ФЛ с замечаниями Кочебина С..docx
Deleted : /Analitics/Документы/ЧТЗ/BR-5610/2 Спецификации/ЧТЗ Принудительное обновление и публикация ФЛ-comments.docx
Deleted : /Analitics/Документы/ЧТЗ/BR-5610/2 Спецификации/ЧТЗ Принудительное обновление и публикация ФЛ-comments_Орлов.docx
Deleted : /Analitics/Документы/ЧТЗ/BR-5610/2 Спецификации/ЧТЗ Принудительное обновление и публикация ФЛ.docx
Revision: 37405
Author: dboytsov
Date: 21 June 2013 г. 10:21:17
Message:
add attributes in file
----
Modified : /Analitics/Документы/ЧТЗ/BR-5864 Запрос данных клиента по интернет-анкете КН/Преобразование BR-5864.docx
Modified : /Analitics/Документы/ЧТЗ/BR-5864 Запрос данных клиента по интернет-анкете КН/ЧТЗ BR-5864 Запрос данных клиента по интернет анкете.docx
可能是更好的方式导出.xls? 在每个列中的.xls文件中导出是否很难?
现在我有以下情况:
但我需要:
答案 0 :(得分:2)
使用csv
库。假设new7.txt
具有作者,修订版,日期的列顺序,您可以执行以下操作:
require 'csv'
# parse the csv file into an array
CSV.parse("new7.txt", {:headers => false}).each do |line|
# assign each 'cell' to a variable
auther = line[0]
revision = line[1]
date = line[2]
# append the newly order data onto a new csv file
CSV.open("new7_revised.txt", "a") do |csv|
csv << [revision, author, date]
end
end
答案 1 :(得分:1)
鉴于OP提供的信息,
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 =~ /Date/
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
end
Revision
行被视为新记录的开头Revision
(或Author
)行之间没有Date
行,则会考虑第二行Author
(或Date
)行成为新纪录。