【发布时间】:2017-12-13 13:08:23
【问题描述】:
我正在尝试解析原始电子邮件。所需的结果是包含特定标题的行的哈希。
这是 Ruby 文件:
raw_email = File.open("sample-email.txt", "r")
parsed_email = Hash.new('')
raw_email.each do |line|
puts line
header = line.chomp(":")
puts header
if header == "Delivered-To"
parsed_email[:to] = line
elsif header == "From"
parsed_email[:from] = line
elsif header == "Date"
parsed_email[:date] = line
elsif header == "Subject"
parsed_email[:subject] = line
end
end
puts parsed_email
这是原始电子邮件:
Delivered-To: user1@example.com
From: John Doe <user2@example.com>
Date: Tue, 12 Dec 2017 13:30:14 -0500
Subject: Testing the parser
To: user1@example.com
Content-Type: multipart/alternative;
boundary="123456789abcdefghijklmnopqrs"
--123456789abcdefghijklmnopqrs
Content-Type: text/plain; charset="UTF-8"
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec
odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla
quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
--123456789abcdefghijklmnopqrs
Content-Type: text/html; charset="UTF-8"
<div dir="ltr">Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam.
Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis
ipsum.<br clear="all">
</div>
--089e082c24dc944a9f056028d791--
puts 语句仅用于我自己的测试,以查看数据是否正在传递。
我得到的是每行都放了两次,最后放了一个空的散列。
我还尝试将不同的位更改为字符串或数组,我还尝试使用 line.split(":", 1) 而不是 line.chomp(":")
有人可以解释为什么这不起作用吗?
【问题讨论】:
-
Chomp 删除 尾随 字符(默认为换行符)。你想要两个:
line.chomp.split(":") -
我明白了。我的印象是 chomp 会在字符串中最后找到的提供(或默认)分隔符处“拆分”,然后删除之后的所有内容(包括分隔符)。
-
顺便说一句,对于折叠的标题正文,您当前的方法完全失效。