如何导入带有分数值的CSV文件,避免将分数作为日期格式

时间:2019-05-12 04:08:21

标签: c# csv-import

我需要为导入CSV文件编写代码,而我是使用流读取器读取文件的。编码没问题,它运作良好。但是我在CSV文件中有问题,我需要从Web导入CSV,因为在我读取文件值是3/4/19作为日期格式后,如果没有类似3/4的数字,那会有很多分数。我应该怎么做才能避免这个问题? 由于直接从网络导入文件,因此无法打开每个单元格并对其进行格式化。 注意:有多种值的组合,例如小数部分和名称字符串

2 个答案:

答案 0 :(得分:0)

我建议您使用库来实现此目的。 CsvHelper是一个用于读取和写入CSV文件的.NET库。极其快速,灵活且易于使用。也是RFC 4180兼容遵循RFC 4180标准,以确保跨系统的兼容性。

该库的一项出色功能就是可以将CSV文件映射到C#类。

foo <- function(d, long){

nm <- if(!missing(long) & long) "long" else if(!missing(long) & !long) "short" # problematic

out <- data.frame(d)

if(!missing(long))out[nm] <- long  ## problematic

return(out)
}

 foo(d = 1:3, long = c(T, F,T))

示例CSV:

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }    
}

void Main()
{
    using (var reader = new StreamReader("path\\to\\file.csv"))
    using (var csv = new CsvReader(reader))
    {
        var records = csv.GetRecords<Foo>();
    }
}

它支持许多其他阅读方式,我建议阅读website和小样。

答案 1 :(得分:0)

您也可以使用CSVHelper作为另一个答案中提到的内容。在阅读您的问题时,我了解到问题在于datetime传递了多种格式。

如果这是问题所在,我相信您应该尝试使用多种格式来解析它,例如,此答案https://stackoverflow.com/a/17859959/713789中提到的一种格​​式

您可能需要编写一个映射器来执行此操作,或者只是简单地编写代码以按照所需的格式读取日期。这必须解决您的问题。