C# 解析设置宽度的文本文件
我正在寻找一些关于如何解析从PBX接收的用于报告的平面文本文件中的CDR数据的指导。文件设置为宽度,而不是使用定界字符 我发现了一种称为文本字段解析器的方法,但不知道是否有更好、更简单的方法 我在下面添加了一些来自供应商的示例,以便您可以看到确切的格式以及字段的含义 范例 以下是外部SMDR记录的示例: 01/14 09:24 00:00:59 T201 003 P001 100 1011T 1405 在哪里,, 01/14是来电者联系您的联系中心的日期 09:24是呼叫开始的时间 00:00:59是代理在转接呼叫之前与呼叫方通话的时间 T201是呼叫者拨入的中继线号码 003是代理回答问题的时间(不是在队列中花费的时间) P001是呼叫排队的ACD路径队列的报告编号 100是代理组的报告编号 1011是第一个接听电话的代理的ID T是转接呼叫标识符 1405是呼叫转接到的代理的ID 这意味着1月14日上午9点24分,一名外部来电者拨打了201号干线的呼叫中心。呼叫排队到ACD路径队列1(显示为P001),排队到代理组100,并在队列中等待3秒后由代理1011应答。接听电话的代理在将电话转接至代理1405之前与客户交谈了59秒。 内部SMDR记录 PBX在以下情况下生成内部SMDR记录: 1.在PBX上的两个设备(分机或代理)之间完成呼叫(即,当所有参与呼叫的方都挂断电话时),呼叫中没有外部方(中继线) 2.该呼叫仅为内部应答呼叫 3.对ACD队列的呼叫报告基于队列的可拨打号码,而不是外部SMDR记录中的报告号码。 4.呼叫中的所有方都将其服务类别设置为启用SMDR内部记录 5.PBX已启用内部SMDR选项。 例子 以下是内部SMDR记录的示例: 01/14 07:20 00:00:10 6979 002 6515 I 7015 在哪里,, 1/14是拨打电话的日期 07:20是呼叫开始的时间 00:00:10是通话的长度 6979是拨打电话的分机 002是代理回答问题的时间(不是在队列中花费的时间) 6515是呼叫的ACD队列的可拨打号码 I是内部呼叫标识符 7015是接听电话的代理的ID 这意味着1月14日上午7:20,内部分机6979拨打了ACD队列P001,可拨打号码6515。等待2秒后,代理7015接听了电话。双方谈了10秒钟。此呼叫中没有外部呼叫方C# 解析设置宽度的文本文件,c#,parsing,text,delimited-text,pbx,C#,Parsing,Text,Delimited Text,Pbx,我正在寻找一些关于如何解析从PBX接收的用于报告的平面文本文件中的CDR数据的指导。文件设置为宽度,而不是使用定界字符 我发现了一种称为文本字段解析器的方法,但不知道是否有更好、更简单的方法 我在下面添加了一些来自供应商的示例,以便您可以看到确切的格式以及字段的含义 范例 以下是外部SMDR记录的示例: 01/14 09:24 00:00:59 T201 003 P001 100 1011T 1405 在哪里,, 01/14是来电者联系您的联系中心的日期 09:24是呼叫开始的时间 0
我希望能够解析上面的CDR/SMDR数据,并将其放入数据库中,以便对其进行报告。我可以很容易地使用CSV数据完成这项工作,但只需要一些关于使用设置宽度数据的最佳方法的指导。对于固定宽度解析,您需要使用
String.Substring()
在您的示例中,您将按照(注意:我可能会偏离1,但您应该了解总体情况)
您将以这种方式继续,直到您从该行获得所需的所有数据
var line = "01/14 09:24 00:00:59 T201 003 P001 100 1011T 1405";
//If we think about the string as an array then:
//we start at index 0 and continue until we get to index 4.
var date = line.Substring(0,4) //This will be 01/14 as a string.
//We start at index 5 and continue until we get to index 10.
var time = line.Substring(5,10) //This shooould be 09:24 as a string.