在 F# 中读取 csv 数据

Reading csv Data in F#

我是一名学生,正在尝试为 class 学习 F#。我自己一直在稳步进步,但我 运行 遇到了一个我无法解决的问题。我被分配读取数据并将数据添加到 CSV 数据库文件。我已经弄清楚如何使用 F Sharp.Data 将数据按列和行排序,但我在弄清楚如何计算项目和搜索列表以查找我需要的数据时遇到了很多困难。我是一个视觉学习者,所以如果我能看一些通过类似的字符串和浮点数列表进行排序的例子,我可能自己就能弄明白。

这是我目前拥有的代码(对于草率,我深表歉意,我还不是最擅长在此站点上发布代码的人)

open System.IO
open System.Net
open F Sharp.Data
open System

[<Literal>]    
let Template = __SOURCE_DIRECTORY__ + @"\students.txt"  // Creating the directory

type Students = CsvProvider< Template >                 // I can format the list using FSharp.Data here

let students = Students.Load(Template)                  
let FirstRow = students.Rows |> Seq.head                //Creating the header
let TMP = 0
let UTG = 0         //counter vars for later use

for rows in students.Rows do        // Reading list correctly now have to   figure out how to count elements
        printfn "%A" rows.Last

//printfn "%A" TMP
//let tmp = Students.Parse                  //Graveyard of Trial and ERRO
//let tst = 0
//for Rows in students do
  // tst = tst + 1

正如您从我的代码中看到的那样,我已将列表按列和行排序。如果有人能告诉我如何计算和搜索列表中的特定项目,将不胜感激。

我知道很多人只是在这个网站上转储任务并期望人们去做,这很糟糕。如果你不自己做作业,你就不是在学习。我只是需要一些帮助来更好地理解它。

最好的问候 - 需要一杯咖啡的 CS 专业,Joe

对一组数据(例如您示例中的 CSV 文件的行)执行各种计数、搜索和过滤任务的最简单方法是使用内置的高阶函数进行集合处理。

一篇文章中有一个很好的概述集合函数之间的选择 作者 Scott Wlaschin,其中还有许多可以帮助您的实际示例。

在您的示例中,您已经在使用 Seq.head,它为您提供序列中的第一项:

students.Rows |> Seq.head  

这是一个很好的开始。您可以使用 Seq 模块中提供的其他功能做很多其他事情。如果您键入 Seq 然后 . 大多数编辑器会向您显示一个包含所有可用功能的自动完成列表(并且上面的文章记录了它们的作用)。

例如,如果您想进行计数,Seq.length 可能会有用。对于各种过滤任务,请尝试 Seq.filter,最后,对于搜索,有 Seq.find.