2016-09-21 13 views
4

それは私がこのようにF#でCsvProvider<>で新しいCSVタイプを作成した場合ということです理由:その後、.csvファイルを保存/フィル/作成サンプルを提供せずにCsvProviderでヘッダーを書くことはできますか?

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

、結果のファイルがスキーマIのヘッダーが含まれていません指定された?最終的な.csvファイルにヘッダーを含める方法があるようですが、そうではありません。

HasHeaders = trueにはサンプルが用意されていないため、エラーが出力されます。 HasHeaders = trueが動作する唯一の方法は、サンプル.csvを用意することです。スキーマを指定してサンプルをなしで指定する方法と、最終ファイルにヘッダーを含める必要があるようです。

[nameOfMyCSV].Save()を使用してスキーマのヘッダーを含めることができない場合がありますか?これはできませんか?

答えて

9

Schemaのヘッダーは、行のプロパティ名にのみ使用されます。ファイルを保存するには、Sampleを提供する必要があります。ただし、サンプルにはヘッダーのみを含めることができます。また、HasHeaderstrueに設定する必要があります。

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

サンプルヘッダーのみが含まれている場合は、データ型を指定したい場合は、スキーマが同様に提供されなければなりません。

あなたは、スキーマを使用すると、SchemaSampleヘッダの名前を変更する場合にのみ、プロパティのために使用されていることがわかります。

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

その後、生成された行はAABCCのような性質を持つことになります。しかし、生成されるファイルは、A,BCのままです。また、あなたはこのスキーマを使用して作成したCSVのHeadersプロパティは、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

関連する問題