解析设置宽度的文本文件

Parsing Set Width Text File

我正在寻找一些关于如何从 PBX 收到的用于报告的平面文本文件解析 CDR 数据的指导。这些文件设置了宽度而不是使用定界符。

我找到了一个叫做文本字段解析器的东西,但想知道是否有更好、更简单的方法。

http://csharphelper.com/blog/2017/02/use-a-textfieldparser-to-read-fixed-width-data-c/

我在下面添加了一些来自供应商的示例,以便您了解确切的格式和字段的含义。

例子

以下是外部 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为最先接听电话的坐席IDT为转接呼叫标识1405为转接的坐席ID

这意味着外部呼叫者于 1 月 14 日 9:24 上午拨入了中继线 201 上的联络中心。呼叫排队到 ACD 路径队列 1(显示为 P001),排队到座席组 100,并在排队等待 3 秒后由座席 1011 应答。接听电话的座席与客户交谈了 59 秒,然后将电话转给座席 1405。 内部 SMDR 记录 内部 SMDR 记录由 PBX 在以下情况下生成 1. PBX 上的两个设备(分机或座席)之间的呼叫完成(即,当所有参与呼叫的各方都挂断时),呼叫中没有外部各方(中继) 2. 呼叫是内部应答仅呼叫 3. 对 ACD 队列的呼叫报告基于队列的可拨号码,而不是在外部 SMDR 记录中找到的报告号码。 4. 呼叫中的所有各方都将其 Class 服务设置为启用 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()Reference to the MS Docs.

在您的示例中,您将按照以下方式做一些事情(注意:我可能会偏离一个,但您应该了解总体情况)

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.

您将以这种方式继续,直到从该行中获得您想要的所有数据。