简单的双重拆分

时间:2013-07-07 11:52:45

标签: c#

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

  

[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。如果我首先尝试使用split with space,它会将日期分成3个部分。我想在括号之间得到日期,然后用分割空格得到其余部分。

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

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用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即可。

答案 1 :(得分:1)

最简单的方法是使用正则表达式,而不是使用split和indexof操作。

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

以下是.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;
}