-4

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

[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.另外我应该能够得到其他列

4

2 回答 2

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其用于所有内容。

于 2013-07-07T18:06:38.800 回答
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;
}
于 2013-07-07T18:50:43.157 回答