我正在阅读具有以下数据格式的csv文件
14-Sep-12 ALUMINI 31-Dec-12 117.65 119.25 117.65 118.9 116.75 36
14-Sep-12 ALUMINI 30-Nov-12 116.95 118.65 116.8 118.4 116.5 252
14-Sep-12 ALUMINI 31-Oct-12 116.45 118.15 116.05 117.85 116.05 2802
我正在使用以下代码
阅读此数据List<string> sc = new List<string>();
filepath = "abc.csv" ;
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(fs);
if (fs != null)
{
while ((oneLine = sr.ReadLine()) != null)
{
sc.Add(oneLine);
}
sr.Close();
// Now writing above data in some file , fo and fout are already declared
fo = new FileStream("tempd.txt", FileMode.Append, FileAccess.Write);
fout = new StreamWriter(fo);
foreach (string str in sc)
{
// i am using ' ' as one of my splitter character
char[] splitter = { ' ', ',', '\t' };
string[] sa1 = str.Split(splitter);
string wline = sa1[0] + "," + sa1[1] + "," + sa1[5] + "," + sa1[6] + "," + sa1[7] ;
fout.WriteLine(wline);
}
fout.Close();
}
我最大的问题是第一列数据是2012年9月14日已更改为2012年9月14日( - 缺失)。这在我的其他应用程序中造成了问题。
在阅读和撰写文件时,我有什么方法可以转换日期格式,我希望将此日期存储为2012年9月14日的2012-9-14。
答案 0 :(得分:2)
我认为这是您正在寻找的答案。
DateTime d = Convert.ToDateTime(sa1[0]);
string wline = d.ToString("yyyy-MM-dd") + "," + sa1[1] + "," + sa1[5] + "," + sa1[6] + "," + sa1[7];
答案 1 :(得分:1)
你的问题没有多大意义,所以我将在这里做一些假设。首先,你说它是一个CSV文件。 CSV代表逗号分隔值,但是当您显示示例时 - 我看不到任何逗号。我是否正确地认为您已在Microsoft Excel中打开CSV并从那里复制到您的帖子中?
如果是这样,那么我会要求您在记事本(或其他文本编辑器)中打开原始CSV文件。您可能会看到原始数据实际上没有破折号。
基本上,当您在CSV文件中提供9月14日的日期时 - Excel会识别出这是一个日期,但它会使用自己的默认日期格式对其进行格式化,这使其看起来像14-Sep-12在Excel中。
另一件事 - 您正在将整个文件读入字符串列表,然后将整个列表输出回重新格式化的新文件。而不是将所有这些加载到内存中,为什么不一次只操作一行?打开输入和输出文件,从输入读取一行,操作它,然后将其写入输出。然后循环到下一行并在完成后关闭这两个文件。你会发现它使用的内存要少得多,并且通常运行得更快。
如果您想重新格式化日期,那很容易。只需将字符串解析为日期即可。然后使用.ToString()中的字符串格式化程序控制日期的输出。我相信Geethanga的回答很好,但Date.Parse()通常比Convert.ToDateTime()更受欢迎。