C# 解析设置宽度的文本文件

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

我正在寻找一些关于如何解析从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秒钟。此呼叫中没有外部呼叫方


我希望能够解析上面的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.