写入CSV文件时,字符串缺少最后2个字符

时间:2014-10-21 15:39:21

标签: c# csv

我有一个我需要操作的CSV文件,操作它很好,直到它写入CSV文件然后它缺少字符串的最后字符。我不知道为什么,因为当我遍历字符串列表时它显示最后2个字符,但是当我打开CSV文件时,最后2个字符不存在。

我正在操作的CSV文件看起来像..

FirstName, Phone, Date, Appointment Time
dan, 123-456-7890, 12/1/2014, 1030
mary, 123-456-7890, 12/2/2014, 100

所以,我修改它看起来像这样

FirstName, Phone, Date, Appointment Time
dan, 123-456-7890, 12/1/2014 10:30 am
mary, 123-456-7890, 12/2/2014 1:00 pm

但是当它写入CSV文件时,am / pm被省略。

代码是

static void Main(string[] args)
{
string[] readData = File.ReadAllLines(@"C:\TestArea\Data extraction.csv");

List<string> finishedData = new List<string>(readData);
finishedData.RemoveAt(0);

List<string> allData = new List<string>();

foreach (var a in finishedData)
{
    int lastIndex;
    lastIndex = a.LastIndexOf(',');

    string unformattedTime = a.Substring(lastIndex + 1);

    string formatTime = string.Empty;

    if (unformattedTime.Length < 4)
    {
        string hour = Convert.ToString(unformattedTime).Substring(0, 1);
        string minute = Convert.ToString(unformattedTime).Substring(1, 2);
        formatTime = hour + ":" + minute;
    }
    else
    {
        string hour = Convert.ToString(unformattedTime).Substring(0, 2);
        string minute = Convert.ToString(unformattedTime).Substring(2, 2);
        formatTime = hour + ":" + minute;
    }

    string finishedLine = a.Remove(lastIndex) + " " + DateTime.Parse(formatTime).ToShortTimeString().ToLower();

    //Console.WriteLine(finishedLine);
    allData.Add(finishedLine);
}
foreach (String s in allData)
    Console.WriteLine(s);

File.WriteAllLines(@"C:\PIA\Test.csv", allData);
Console.ReadLine();

}

2 个答案:

答案 0 :(得分:0)

问题可能出在DateTime.Parse。您需要传递IFormatProvider作为第二个参数。

答案 1 :(得分:0)

由于您的文件将由计算机系统使用,因此数据在Excel中看起来不太正常并不重要。唯一重要的是文件的实际内容采用系统所期望的格式。

Excel可能会模糊底层格式,因为它会尝试猜测数据类型是什么,并尝试猜测应该显示数据类型的格式。