2016-09-21 2 views
4

Почему, если я создаю новый тип CSV с CsvProvider<> в F #, как это:Могу ли я писать заголовки с CsvProvider без предоставления образца?

type ThisCsv = CsvProvider<Schema = "A (decimal), B (string), C (decimal)", HasHeaders = false> 

затем создать/заполнить/сохранить файл CSV, полученный файл не содержит заголовки в схеме I указано? Кажется, должен быть способ включить заголовки в финальный файл .csv, но это не тот случай.

Устранение ошибок HasHeaders = true, потому что нет образца. Единственным способом для работы HasHeaders = true является выборка .csv. Мне кажется, что должен быть способ указать схему без образец, а также включить заголовки в окончательный файл.

Я пропустил что-то, когда я использую [nameOfMyCSV].Save(), который может включать заголовки из схемы или это не может быть сделано?

ответ

9

Боюсь, что заголовки из Schema используются только для имен свойств строки. Чтобы их сохранить в сохраненном файле, вам необходимо предоставить Sample. Хотя, образец может содержать только заголовки. Кроме того, HasHeaders должен быть установлен в true:

type ThisCsv = CsvProvider< 
       Sample="A, B, C", 
       Schema = "A(decimal), B, C(decimal)", 
       HasHeaders = true> 

Если образец содержит только заголовки затем, если вы хотите, чтобы указать типы данных, схема должна быть обеспечена также.

Вы можете видеть, что схема используется для имущества только тогда, когда вы переименовать Sample заголовки в Schema:

type ThisCsv = CsvProvider< 
       Sample="A, B, C", 
       Schema = "A->AA(decimal), B->BB, C(decimal)", 
       HasHeaders = true> 

Затем генерируется строка будет иметь свойства, как AA, B, CC. Но созданный файл будет по-прежнему иметь A, B, C. Кроме того, Headers свойства CSV, созданное с использованием этой схемы будет Some [|"A"; "B"; "C"|]:

// Run in F# Interactive 
let myCsv = new ThisCsv([ThisCsv.Row(1.0m, "a", 2.0m)]) 
myCsv.Headers 
// The last line returns: Some [|"A"; "B"; "C"|] 

Кроме того, чтобы получить лучшее понимание того, что происходит внутри парсер стоит взглянуть на исходном коде в GitHub: CSV folder в целом и CsvRuntime.fs в частности.

+0

Отличное объяснение. Благодаря! – Steven

 Смежные вопросы

  • Нет связанных вопросов^_^