【问题标题】:Reading tab delimited files in f#在 f# 中读取制表符分隔的文件
【发布时间】:2015-07-25 20:31:29
【问题描述】:

我是 F# 新手,对函数式语言没有太多经验。我需要在制表符分隔文件的几列中选择值。我找到了如何将文本文件的行读入序列,但序列似乎不像数组那样工作,我不知道如何从中选择特定值。任何人都可以帮忙吗?谢谢。

【问题讨论】:

    标签: parsing file-io f# csv


    【解决方案1】:

    您应该可以使用CSV type provider 来执行此操作。它也支持制表符分隔的文件(请参阅该页面上的“自定义分隔符和制表符分隔文件”部分)。

    要使用类型提供程序,您需要一个示例(也可以是您的实际输入文件)。然后,您可以告诉类型提供者根据您的样本推断类型。如果您有 tsv 扩展名,它会自动将其视为制表符分隔,但您也可以显式指定分隔符:

    type MyFormat = CsvProvider<"C:/sample.tsv", Separators="\t">
    

    然后你可以使用推断类型来读取你的数据:

    let data = MyFormat.Load("C:/mydata.tsv")
    for row in data.Rows do
      printfn "%s" row.YourColumn
    

    【讨论】:

    • 我要读取的文件末尾有三行,只有 2 列,而我的其余行有 22 列。我不需要最后三个,有没有办法让它忽略那些列?
    • 将 IgnoreErrors 添加到类型 MyFormat = CsvProvider。根据Doc 设置 IgnoreErrors 静态参数为 true 以便自动跳过元素数量不正确的行。
    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2021-09-22
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多