Ruby - анализ текстового файла - PullRequest
14 голосов
/ 03 апреля 2011

Я довольно новичок в Ruby и пробовал немного по-настоящему разобрать текст. Однако сейчас я пытаюсь разобрать немного более сложный файл и затем вытолкнуть его в CSV-файл (что я раньше не делал), и я застрял.

Файл выглядит следующим образом,

Title
some text
some different text
Publisher: name
Published Date: date
Number1: number
Number2: number
Number3: number
Category: category
----------------------
Title
some text
some different text
Publisher: name
Published Date: date
Number1: number
Number2: number
Number3: number
Category: category
----------------------

и т.д.

Каждая строка будет представлять новый "столбец" в CSV.

Может быть, кто-нибудь сможет протянуть руку?

Большое спасибо!

Ответы [ 2 ]

24 голосов
/ 03 апреля 2011

Вот общая идея для вас, чтобы начать с

File.open( thefile ).each do |line|
    print line without the new line if line does not contain  /--+/
    if line contains /--+/
        print line with a new line
    end
end
4 голосов
/ 03 апреля 2011

Вот одно полное решение. Обратите внимание, что он очень чувствителен к файловой структуре!

out_file = File.open('your_csv_file.csv', 'w')
out_file.puts "Title,Publisher,Publishedate,Number1,Number2,Number3,Category"
the_line = []
in_title = false
IO.foreach('your_file_name') do |line|
  if line =~ /^-+$/
    out_file.puts the_line.join(',')
    the_line = []
  elsif line =~ /^Title$/
    in_title = true
  elsif line =~ /^(?:Publishe(?:r|d Date)|Number\d|Category):\s+(.*?)$/
    the_line += [$1]
    in_title = false
  elsif in_title
    the_line[0] = (the_line.empty? ?  line.chomp : "\"#{the_line[0]} #{line.chomp}\"")
  else
    puts "Error: don't know what to do with line #{line}"
  end
end
out_file.close
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...