-1

我正在阅读具有以下数据格式的 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 日。

4

2 回答 2

2

我认为这就是您正在寻找的答案。

DateTime d = Convert.ToDateTime(sa1[0]);

string wline = d.ToString("yyyy-MM-dd") + "," + sa1[1] + "," + sa1[5] + "," + sa1[6] + "," + sa1[7];
于 2012-09-29T02:28:49.520 回答
1

你的问题没有多大意义,所以我在这里做一些假设。首先,您说它是一个 CSV 文件。CSV 代表逗号分隔值,但是当您显示示例时 - 我根本看不到逗号。我是否认为您已在 Microsoft Excel 中打开 CSV 并从那里复制到您的帖子中?

如果是这样,那么我会要求您在记事本(或其他文本编辑器)中打开原始 CSV 文件。您可能会看到您的原始数据实际上没有破折号。

基本上,当您在 CSV 文件中提供 2012 年 9 月 14 日的日期时,Excel 会识别这是一个日期,但随后会使用自己的默认日期格式对其进行格式化,这使得它在 Excel 中看起来像 14-Sep-12。

另一件事-您正在将整个文件读入字符串列表,然后将整个列表输出回重新格式化的新文件。与其将所有这些都加载到内存中,不如一次只操作一行?打开输入和输出文件,从输入中读取一行,对其进行操作,然后将其写入输出。然后循环到下一行并在完成后关闭这两个文件。您会发现这使用更少的内存并且通常运行得更快。

如果你想重新格式化日期,这很容易。只需将字符串解析为日期即可。然后使用 .ToString() 中的字符串格式化程序控制日期的输出。我相信 Geetanga 的回答很好地说明了这一点,但 Date.Parse() 通常比 Convert.ToDateTime() 更受欢迎。

于 2012-09-29T02:46:56.517 回答