简单双分割

本文关键字:分割 简单 | 更新日期: 2023-09-27 18:21:27

我正在读取一个文本文件,以便将其上传到数据库中。文本文件包含这样的内容,没有标题。。。

[10-10-2013 11:20:33.444 CDF]1000020事件T这是错误消息

[10-10-2013 11:20:33.445 CDF]1000020事件T这是的第二条错误消息

如何在数据库的日期列中存储"10-10-2013 11:20:33",在整数列中存储毫秒444。在这里,如果我尝试先使用带空格的拆分,它会将日期拆分为3部分。我想把日期放在括号之间,然后把剩下的用空格隔开。

这里要提到两点。1.我们在日期列之间有空格。2.此外,我应该能够获得其他列

简单双分割

真正最简单的方法是使用正则表达式,而不是使用拆分和索引操作。

正则表达式允许您指定一种模式,可以直接从中提取字符串片段。如果格式发生了变化,或者最初没有考虑到一些细微之处,可以通过调整表达式来解决问题,而不是重写一堆代码。

以下是.NET中正则表达式的一些文档:http://msdn.microsoft.com/en-us/library/az24scfc.aspx

这是一些示例代码,可能会实现您想要的功能。你可能需要稍微调整一下才能得到想要的结果。

var m = Regex.Match(currentLine, @"^'[(?<date>[^']]*)']'s+(?<int>[0-9]+)'s+(?<message>.*)'s*$");
if(m.Success) {
    // may need to do something fancier to parse the date, but that's an exercise for the reader
    var myDate = DateTime.Parse(m.Groups["date"].Value);
    var myInt = int.Parse(m.Groups["int"].Value);
    var myMessage = m.Groups["message"].Value;
}

最简单的方法是只使用String.SplitString.Substring

一般来说,我会这样做:

//find the indices of the []
var leftIndex = currentLine.IndexOf("[");
var rightIndex = currentLine.IndexOf("]");
//this get's the date portion of the string
var dateSubstring = currentLine.Substring(leftIndex, rightIndex - leftIndex);
var dateParts = dateSubstring.Split(new char[] {'.'});
// get the datetime portion
var dateTime = dateParts[0];
var milliseconds = Int16.Parse(dateParts[1]);

编辑

由于日期部分是固定宽度的,您可以对所有内容使用Substring