我正在尝试解析一串数据,以便将它们存储到数据库中。 数据样本如下所示:
完成@ Store @ 000019411:02:48.499 1 0C 138D71802103D @ 000080211:03:16.530 1 0F 138D81802102B @ 000088211:04:10.546 1 0D 138D918021034 @ 000023011:04:45.809 1 0F 138DA1802103B @ 000019411:04:47.202 1 08 238DB1802102D @ 000025111:05:51.550 1 0F 138DC18021037 @ 000088111:05:53.429 1 0F 138DD18021048 @ 11 @ $
我试图将其转换为:
000019411:02:48.499 1 0C
000080211:03:16.530 1 0F
我也在@符号之前跳过信息。在字符串数据的最末端只有一个新行,回车符。 所有字符串都以@ Store @开头,以@ $结尾 记录的数量可能会有很大差异,但这可能是一个问题。 我正在努力研究如何以可靠的方式取出记录,因为我的结果好坏参与。
if (data.Contains("Store@") == true)
{
y = data.IndexOf("@Store@");
while (x<=data.Length) {
Console.WriteLine(x);
string substr = data.Substring(x,y);
string substr = data.Substring(y + 7, y + 18);
Console.WriteLine("Data: {0}", substr);
y = substr.Length+21;
x = y + 21;
substr = "";
}
第一次使用断点在调试模式下运行代码时,我得到以下输出:
数据:000019411:02:48.499 1 0C
66个
数据:@ 000080211:03:16.530 1 0F 138D81802102B @ 000088211:04:10.546 1
105
我不确定最新情况,66和105是当前的字符串长度。
我对此代码的另一个问题是,当我运行它时,我收到一个调试错误:
发生了System.ArgumentOutOfRangeException 的HResult = 0x80131502 消息=索引和长度必须引用字符串中的位置。 参数名称:长度
当我设置断点时,程序运行正常,发送数据的应用程序并不总是发送数据,我必须告诉它,不幸的是我无法更改数据的格式。 为长期查询道歉。 谢谢你们
答案 0 :(得分:0)
const int recsize = 38;
const int outputsize = 24;
string data = "Finish@Store@000019411:02:48.499 1 0C 138D71802103D@000080211:03:16.530 1 0F 138D81802102B@000088211:04:10.546 1 0D 138D918021034@000023011:04:45.809 1 0F 138DA1802103B@000019411:04:47.202 1 08 238DB1802102D@000025111:05:51.550 1 0F 138DC18021037@000088111:05:53.429 1 0F 138DD18021048@11@$";
foreach(string s in data.Split("@"))
{
if(s.Length == recsize)
Console.WriteLine(s.Substring(0, outputsize));
}
Console.ReadKey();
输出:
000019411:02:48.499 1 0C
000080211:03:16.530 1 0F
000088211:04:10.546 1 0D
000023011:04:45.809 1 0F
000019411:04:47.202 1 08
000025111:05:51.550 1 0F
000088111:05:53.429 1 0F