.net с использованием XML для сопоставления CSV для класса - PullRequest
1 голос
/ 26 августа 2010

У меня есть задача, где я должен прочитать CSV-файл и записать содержимое в список C #. Поскольку файл csv может изменить свою компоновку (заголовок / порядок) в будущем, я хочу использовать файл конфигурации для отображения атрибутов.

Теперь мне интересно, есть ли пример, чтобы мне не пришлось заново изобретать weel: D

Мой источник данных выглядит следующим образом (разделитель табуляции разделен)

Customer No.    Customer Name    Created       Discount
10215           John Doe         2010-08-25    5050.23

А мой класс такой:

Class Customer
{
    string CustomerNo {get;set;}
    string CustomerName {get;set;}
    DateTime CreatedOn {get;set;}
    decimal Discount {get;set;}
}

Теперь я хочу получить внешний xml-файл с определением, чтобы я мог изменить его во время выполнения без перекомпиляции кода.

<customermapping mapstoclass="my.namespace.Customer">
    <attribute csvcaption="Customer No." mapstoproperty="CustomerNo"
               typeof="System.String" required="true">
    <attribute csvcaption="Customer Name" mapstoproperty="CustomerName"
               typeof="System.String" required="true"> 
    <attribute csvcaption="Created" mapstoproperty="CreatedOn"
               typeof="System.DateTime" required="false">
    <attribute csvcaption="Discount" mapstoproperty="Discount"
               typeof="System.Decimal" required="false">
</customermapping> 

В конце дня я хочу сделать следующее: (Я уже могу прочитать все значения из файла CSV (первая строка заголовка и в отдельном массиве)

List<Customer> customers =
    CreateCustomerList(string[] csvCaptions, string[] csvLines, 
                       "c:\customermapping.xml");

Не должно быть слишком сложно, но, как я уже сказал, если кто-то уже делал что-то подобное, любые примеры приветствуются.

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

Возможно, вы захотите использовать LINQ для этого. Здесь есть статьи о LINQ to TEXT:

Обновление: Я перечитал ваш вопрос и больше не уверен, что использование LINQ действительно поможет решить вашу проблему, однако я оставляю здесь ответ на всякий случай, если это поможет.

Если вы можете помочь, я бы объяснил, какие столбцы отображаются на какие свойства в коде, а не в XML-файлах.

0 голосов
/ 26 августа 2010

Похоже, вы хотите заново изобрести схему xsd. Если вы можете изменить формат, используйте xml и определите эти правила в xml.

Если вы не можете изменить формат или ваши данные слишком велики, чтобы уместиться в xml, я думаю, вы сами. CSV - это, скорее, не adhoc-формат. Я не думаю, что какое-либо тело заботится о том, чтобы создать для него схему проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...