F#CSV类型提供程序:如何忽略某些行?
我是一个初学者,开始使用FSharp.datalibrary 我有一个csv文件,我想忽略它的最后一行,因为 它们类似于“这些数据是由……产生的”F#CSV类型提供程序:如何忽略某些行?,csv,f#,f#-data,Csv,F#,F# Data,我是一个初学者,开始使用FSharp.datalibrary 我有一个csv文件,我想忽略它的最后一行,因为 它们类似于“这些数据是由……产生的” 顺便说一下,即使我删除了这些行,保存文件,当我再次打开这些单元格时,它们会重新出现。。。粘性的 CsvFile.Load有一个重载,它接受一个文本阅读器派生的参数 如果知道要跳过多少行,可以在文件上创建StreamReader,也可以使用ReadLine跳过行 use reader = StreamReader("mydata.csv") read
顺便说一下,即使我删除了这些行,保存文件,当我再次打开这些单元格时,它们会重新出现。。。粘性的 CsvFile.Load有一个重载,它接受一个
文本阅读器
派生的参数
如果知道要跳过多少行,可以在文件上创建StreamReader
,也可以使用ReadLine
跳过行
use reader = StreamReader("mydata.csv")
reader.ReadLine() |> ignore
reader.ReadLine() |> ignore
let rawfile = CsvFile.Load(reader)
如果您可以将整个scv加载到内存中,那么您可以简单地反转行,跳过所需内容,然后(可选地)反转回去 例如:
let skipNLastValues (n:int) (xs:seq<'a>) =
xs
|> Seq.rev
|> Seq.skip n
|> Seq.rev
for i in (skipNLastValues 2 {1..10}) do
printfn "%A" i
let skipNLastValues(n:int)(xs:seq)我认为CsvProvider不会在末尾跳过行,但您可以始终使用rows.Take(x)
,或应用筛选器获取必要的数据。还有三条注释:1.您可能希望尝试使用来正确键入列,2.它有一个将跳过不符合条件的行的IgnoreErrors=true
选项,3.如果您用“[]装饰F#记录,您可能希望尝试使用IgnoreFirst和IgnoreLast选项`Filehelpers工作得很好。CSV提供程序和解析器(您正在使用的)都不可用可以跳过最后几行。请尝试设置ignoreErrors
参数以忽略最后几行。这只跳过第一行,CsvFile已经为其提供了一个选项skipRows
。仅向前的文本读取器不能跳过页脚行,因为它不知道有多少行是左撇子。应该更好地阅读问题。是的,您需要一个预先读取的自定义阅读器,并在空白行之前标记结束,或者将所有行读取到一个数组中,切掉最后一行,然后将它们放回一个字符串中,以用于String Reader实例。
let skipNLastValues (n:int) (xs:seq<'a>) =
xs
|> Seq.rev
|> Seq.skip n
|> Seq.rev
for i in (skipNLastValues 2 {1..10}) do
printfn "%A" i