Ruby:不同列中的每一行

标签 ruby parsing csv text

我是 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

我需要:

  • 在输出的 CSV 文件中 A 列中包含“Revision”的行
  • “作者”行放在B列
  • C 列中包含“日期”的行
  • 等等

谁能告诉我如何按照描述将数据放入列中?

现在所有的行都放在一行中。

“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文件里面每一列导出是不是很麻烦?

现在我有以下情况: enter image description here

但我需要: enter image description here

最佳答案

使用csv 库。假设 new7.txt 的列顺序为 Author、Revision、Date,您可以执行以下操作:

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

关于Ruby:不同列中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245628/

相关文章:

c# - 使用 Anglesharp 从 html 字符串中获取列表 <li> 标签的集合

php - 从分隔字符串中删除尾随分隔字符

ruby-on-rails - 如何通过 Rails 中的 post 请求处理 csv 下载提示

java - 当没有输入任何内容时解析生成我生成的错误消息的字符串

c - 使用 C/C++ 解析电子邮件 header 字段

ruby-on-rails - 通过 Rails ActiveRecord Association 调用类方法

`remove_const' 中的 Ruby Sinatra Hello World 错误:常量 URI::WFKV_ 未定义 (NameError)

java - 将每个属性的单个 bean rowise 写入 csv

ruby - 如何在 Sinatra 中获取当前路径/路线?

ruby - 如何使用 ruby​​ 和 net/ssh 在 Linux 中切换用户?