2017-02-28 1 views
3

は、私はその最後の行 は、彼らが「このデータが製造したようなものですので、私は無視したいCSVファイルを持っている初心者ですとFSharp.Dataライブラリに http://fsharp.github.io/FSharp.Data/library/CsvProvider.htmlF#CSV Type Provider:いくつかの行を無視する方法?

let rawfile = CsvFile.Load("mydata.csv") 
for row in rawfile.Rows do 
     let d = System.DateTime.Parse (row.GetColumn("Date")) 
     let p = float (row.GetColumn("Close Price")) 
     printfn "%A %A" d p 
     price_table.[BTC].Add (d,p) 

の使用を開始します... .. "

ところで、たとえそれらの行を削除しても、ファイルを保存しても、それらのセルが再び開かれたときに再び表示されます。

+2

私はCsvProviderが最後に行をスキップするとは思わないが、あなたは常に必要なデータを取得するために 'rows.Take(x)が'、またはフィルタを適用することができます。さらに3つのコメント:1. [Csv Type Provider](http://fsharp.github.io/FSharp.Data/library/CsvProvider.html)を使用して列を正しく入力してみるとよいでしょう。不適合行をスキップする 'IgnoreErrors = true'オプション。3. F#レコードを装飾する場合は、IgnoreFirstとIgnoreLastオプションを持つ[FileHelpers](http://www.filehelpers.net/)を試してみるとよいでしょう。 with [] 'Filehelpersはうまく動作します。 – s952163

+2

(使用している)CSVプロバイダまたはパーサーは、最後の行をスキップできません。最後の行を無視するように 'ignoreErrors'パラメータを設定してみてください。 –

答えて

0

CsvFile.Loadのオーバーロードには、TextReaderの派生パラメータが必要です。

スキップする行数を知っている場合は、ファイルにStreamReaderを作成して、ReadLineという行をスキップできます。あなたが、あなたは単にあなたが欲しいものを飛ばし、あなたの行を逆にすることができ、メモリに全体のSCVをロードするとしてOKなら

use reader = StreamReader("mydata.csv") 
reader.ReadLine() |> ignore 
reader.ReadLine() |> ignore 
let rawfile = CsvFile.Load(reader) 
+2

これは、CsvFileに既に 'skipRows'オプションがある最初の行だけスキップします。 – s952163

+1

いくつの行が残っているかわからないので、前方転送専用のテキストリーダーではフッター行をスキップできません。 –

+2

質問をよく読んでいなければなりません。はい、先読みし、空白行の前に終わりをマークしたり、配列にすべての行を読み込んだり、最後の行をスライスして、StringReaderインスタンスの代わりに1つの文字列に戻したりするカスタムリーダーが必要です。 – marklam

0

(オプション)バック逆。

例:

関連する問題