【问题标题】:Ruby: how to parse txt in xls?Ruby:如何在 xls 中解析 txt?
【发布时间】:2013-06-22 08:47:10
【问题描述】:

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

但现在我有以下情况:

我需要:

我在 .csv 中使用导出 可能是在 .xls 中导出的更好方法?在里面的每一列中导出 .xls 文件是不是很困难? 我在输入文件(new7.txt)中有“修订”“作者”“日期”等词。在输入文件中,它不是一列。我想解析输入文件并按列复制到.xls

【问题讨论】:

  • 我不确定您为什么将所有数据都放在一列中。如果您将转换后的数据保存在 CSV 文件中(如脚本所做的那样),Excel 应自动将它们解析为三列。如果有问题,您仍然可以使用Data -> Text to Columns 菜单将数据拆分为以, 分隔的列。
  • @ArieShaw 谢谢!!!真是帮了我大忙!!!不好意思以前不知道Excel的这个功能

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多