Ruby:如何解析xls中的文本?

时间:2013-06-22 08:47:10

标签: ruby-on-rails ruby parsing csv xls

我是Ruby的新手,我想解析txt文件(new7.txt) 输入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

Stackoverflow的同事帮助我编写程序:

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

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

我需要那个: enter image description here

我在.csv中使用导出 可能是一个更好的方式导出.xls?在每个列中的.xls文件中导出是否很难? 我在输入文件(new7.txt)中有这样的单词作为“Revision”“Author”“date”等等。在输入文件中,它不是列。我想解析输入文件并按列

复制到.xls

1 个答案:

答案 0 :(得分:1)

根据您的区域设置(仅美国似乎不同),Excel应使用分号(“;”)作为CSV分隔符而不是昏迷(“,”)。

来自Wikipedia

  

“Microsoft Excel将打开.csv文件,但根据系统的区域设置,它可能会使用分号作为分隔符而不是逗号,因为在某些语言中,逗号用作小数分隔符。”

您可以使用选项:col_sep指定列分隔符。 这应该有效。

CSV.generate('new1.csv', 'w', {col_sep: ";"}) do |csv|
  data.each do |record|
    csv << record
  end
end