我正在阅读一个文本文件,将其上传到数据库中。文本文件包含这样的,没有标题......
[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.此外,我应该能够获得其他专栏
答案 0 :(得分:1)
最简单的方法是使用String.Split
和String.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;
}