C# 字符串在写入CSV文件时缺少最后2个字符

C# 字符串在写入CSV文件时缺少最后2个字符,c#,csv,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 所以,我把它改成这样 Firs

我有一个需要处理的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();

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

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


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

如果100是1pm,那么1am是什么?-输入中没有am/pm信息,因此您需要在构建formatTime字符串并将其粘贴在end0100上时确定是否可能…时间是军事时间,因此我将其更改为正常时间。您如何打开CSV文件?它应该在文本编辑器中,例如记事本,而不是电子表格中,例如。Excel@JoelFan,我打开工作表并用excel打开。您没有正确测试您的程序。。。如果它是一个CSV文件就可以了,但是如果你在Excel中打开它,你看不到文件中真正的内容。。。你需要在记事本中打开它,告诉它到底发生了什么