2013-06-22 6 views
-1

Я новичок в Ruby, и я хочу, чтобы разобрать текстовый файл (new7.txt) Образец входного файла текстовый:Ruby: как разобрать txt в xls?

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 

Но теперь у меня есть следующий situatuion: enter image description here

И мне нужно, чтобы: enter image description here

Я использую экспорт в .csv Может быть, это лучший способ экспортировать в .xls? Трудно ли экспортировать файл .xls в каждый столбец внутри? У меня такие слова во входном файле (new7.txt) как «Редакция», «Автор», «дата» и т. Д. Во входном файле это не столбец. И я хочу проанализировать входной файл и скопировать на .xls по столбцам

+1

Я не уверен, почему вы получили все данные в одной колонке. Если вы сохранили преобразованные данные в CSV-файле (как это делал сценарий), Excel должен автоматически проанализировать их на три столбца. Если есть проблемы, вы можете использовать меню 'Data' ->' Text to Columns' для разделения данных на столбцы, разделенные символом ','. –

+0

@ArieShaw Спасибо !!! Это реальная помощь! Мне стыдно, что я не знаю эту функцию Excel раньше –

ответ

1

В зависимости от ваших региональных настроек (только США кажутся разными) Excel должен использовать точку с запятой («;») как разделитель CSV вместо coma («,») ,

От Wikipedia:

«Microsoft Excel открывает файлы .csv, но в зависимости от региональных настроек системы, она может рассчитывать на точку с запятой в качестве разделителя вместо запятой, так как в некоторых языках запятой используется как десятичный разделитель ».

Вы можете использовать опцию :col_sep, чтобы указать разделитель столбцов. Это должно сработать.

CSV.generate('new1.csv', 'w', {col_sep: ";"}) do |csv| 
    data.each do |record| 
    csv << record 
    end 
end 
Смежные вопросы