【发布时间】:2017-11-07 02:21:33
【问题描述】:
我有一个带有服务器日志的 CSV。我需要将日期/时间格式作为附加图像拆分到我的数据表中。
CSV txt 文件示例
10.115.10.74 - - [20/Mar/2016:03:38:14 +0800] "GET /portal/images/banners/iot.jpg HTTP/1.1" 404 918 "http://www.utem.edu.my/portal/" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
172.16.75.219 - - [20/Mar/2016:03:38:17 +0800] "GET / HTTP/1.1" 200 98 "http://192.168.0.1:8090/httpclient.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/ 537.36(KHTML,如 Gecko)Chrome/43.0.2357.124 Safari/537.36"
有什么办法可以实现这样的目标吗?
到目前为止我已经尝试过什么
string[] raw_text = System.IO.File.ReadAllLines("C:\\log4.csv");
string[] data_col = null;
int x = 0;
foreach (string text_line in raw_text)
{
//MessageBox.Show(text_line);
data_col = text_line.Split(' ', '<', '>', '[', ']', '-', '"', ';', '(', ')', '+', ':');
if (x == 1)
{
for (int i = 0; i <= data_col.Count() - 1; i++)
{
my_datatable.Columns.Add(data_col[i]);
}
x++;
}
else
{
my_datatable.Rows.Add(data_col);
}
【问题讨论】:
-
发布 csv 的文本版本,以便我们更轻松地进行测试。
-
已更新,不便之处敬请见谅..
-
您如何显示这些数据?如果它是某种形式的网格控件,是否有可能将网格中的多个列绑定到单个数据列,然后独立地格式化这些列?这意味着您可以在数据表中保持 data 完整,只需调整它的显示方式。
-
实际上,由于
:字符用作拆分字符(例如20/Mar/2016, 03, 38, 14, 0800),您的代码在时间部分遇到了拆分问题。我认为DateTime.TryParse和dd/MMM/yyyy:HH:mm:ss格式可以解决这个问题。 -
我建议您使用适当的 CSV 解析器库。这种格式足够复杂,可以由上面的自制代码处理。