从url使用CsvReader读取CSV

时间:2013-06-19 13:04:32

标签: c# parsing csv web

我必须从以下网址读取CSV文件:http://somedomain.com/getdata.aspx?p1=param1&p2=param2

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_serviceUrl);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

StreamReader sr = new StreamReader(resp.GetResponseStream());
CsvReader csvread = new CsvReader(sr, new CsvConfiguration()
    {

    });
List<Entity> record = csvread.GetRecords<Entity>().ToList();
sr.Close();

但我这样做没有运气 标题字段与<...>一样:

  

<Field1>;<Field2>;<Field3>

和数据

  

stringValue;777;anotherStringValue

任何帮助?

2 个答案:

答案 0 :(得分:1)

对我来说,解决方案是读取文件并将其映射到实体

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_serviceUrl);
    req.KeepAlive = false;
    req.ProtocolVersion = HttpVersion.Version10;
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

    using (StreamReader streamReader = new StreamReader(resp.GetResponseStream()))
    {
        CsvConfiguration configuration = new CsvConfiguration()
        {
            Delimiter = ";",
            HasHeaderRecord = true,
            IsHeaderCaseSensitive = false
        };
        configuration.RegisterClassMap<EntityMap>();
        CsvReader csvread = new CsvReader(streamReader, configuration);
        List<Entity> record = csvread.GetRecords<Entity>().ToList();
    }

并且有一个映射:

public class EntityMap : CsvClassMap<Entity>
    {
        public override void CreateMap()
        {
            Map(m => m.Field1).Name("<Field1>");
            Map(m => m.Field2).Name("<Field2>");
        }
    }

答案 1 :(得分:0)

这里似乎有很多问题需要你处理。遗憾的是,您提供的信息非常少,您面临的确切问题以及申请中的哪些方面。

由于我不知道.NET框架中的CsvReader类,所以我假设您正在寻找一个现有框架(或者已经在使用一个框架)。

至于你发布的代码片段,我建议将其分成几部分。比如,首先将文件加载到磁盘的某个临时位置,这样您就可以在完成工作后立即清理request/response个对象。

我不确定当使用该ResponseStream时StreamReader的行为如何,在访问您可能没有足够访问权限的源时可能会出现更多麻烦。

将文件成功下载到有意义的位置后,您可以使用您想要使用的任何工具或框架来处理它。

根据CSV文件的复杂程度,此StackOverflow线程可能还提供了解析文件的一些灵感:Very simple C# CSV reader

应该有足够的互联网资源来帮助您开始您的单一步骤,例如:

  1. 下载文件: Downloading a file via HTTP post and HTTP get in C# 这讨论了使用HttpWebRequest获取文件以及如何将其保存到磁盘的两种备选方案;或Download Files from Web使用WebClient类解释此内容。

  2. 解析CSV文件: 一个非常有用且功能强大的库:FileHelpers Library查看文档和示例以了解其工作原理。 Delimeted File Engine可能正是您所需要的。或者查看LINQ to CSV library