需要帮助解析没有格式化的电子邮件

时间:2015-05-01 12:47:27

标签: c# email parsing

早上好。

我目前每月都会收到一封电子邮件给我。多年来收到这封电子邮件的团队已经手动复制并将其粘贴到excel表中,现在这个时间比以往任何时候都要多。

我被要求自动化这个过程,而且我遇到了问题,我尝试了各种解析和清理方法,以便将电子邮件发送到某种格式,我可以把它变成CSV但没有运气。如果有人对解析这封电子邮件有任何想法,我将非常感激。我在下面添加了一张图片,格式根本没有变化,一封电子邮件中最多有1500张。由于安全性,某些数据必须被涂黑。编程全部在C#.net 4.5中完成。

Apple monthly Report

如果需要任何其他信息,请告知我们。 谢谢!!

请求纯文本版

http://pastebin.com/uFhAcnem

2 个答案:

答案 0 :(得分:0)

逐行阅读文本

如果找到起始标记(行以“Repair#”开头),则将此行解析为其固定字段。

从这一行你知道接下来的7行固定格式:

所以请阅读下一行7并将它们分析到各自的固定字段中。

重新开始直到文件结尾

添加大量检查和错误处理。

答案 1 :(得分:0)

如果格式总是与示例中的格式类似,请使用string.Split和StringSplitOptions.RemoveEmptyEntries考虑以下代码:

public static string inputEmail = "---------------------------------------------------------------------------------------\n"
  + "Repair #      PO#                                   Dispatch #        Serial #\n"
  + "03018377XXXX  JH103786                              G18646XXXX        C02NN8NAXXXX\n"
  + ""
  + "Repair Date   SN Type                               Warranty\n"
  + "10.03.2015    SP Carry-In Repairs                   APPLE LIMITED WARRANTY\n"
  + ""
  + "Material #    Description                                   Amount   Score       Total\n"
  + "011-0472      SVC, LABOR TIER 2                              25.00   1.36        34.00\n";


private static void Main(string[] args)
{
  string[] parts = inputEmail.Split(new string[] { "  " }, StringSplitOptions.RemoveEmptyEntries);
  foreach (string part in parts)
    Console.WriteLine(part.Trim());
}

产生以下输出:

---------------------------------------------------------------------------------------
Repair #
PO#
Dispatch #
Serial #
03018377XXXX
JH103786
G18646XXXX
C02NN8NAXXXX
Repair Date
SN Type
Warranty
10.03.2015
SP Carry-In Repairs
APPLE LIMITED WARRANTY
Material #
Description
Amount
Score
Total
011-0472
SVC, LABOR TIER 2
25.00
1.36
34.00

这应该很容易解析(你只需要一个行的计数器,如果检测到-----行重置计数器然后你知道第5行是修复号,第6行是PO号...)