早上好。
我目前每月都会收到一封电子邮件给我。多年来收到这封电子邮件的团队已经手动复制并将其粘贴到excel表中,现在这个时间比以往任何时候都要多。
我被要求自动化这个过程,而且我遇到了问题,我尝试了各种解析和清理方法,以便将电子邮件发送到某种格式,我可以把它变成CSV但没有运气。如果有人对解析这封电子邮件有任何想法,我将非常感激。我在下面添加了一张图片,格式根本没有变化,一封电子邮件中最多有1500张。由于安全性,某些数据必须被涂黑。编程全部在C#.net 4.5中完成。
如果需要任何其他信息,请告知我们。 谢谢!!
请求纯文本版
答案 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号...)