在F#中读取csv数据

3
我是一名学生,正在努力学习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
1个回答

1
最简单的处理数据集合(例如CSV文件中的行)的计数、搜索和过滤任务的方法是使用内置的高阶函数进行集合处理。Scott Wlaschin在一篇文章《选择集合函数》中提供了非常好的概述,其中还有许多实用的示例可以帮助您。在您的示例中,您已经使用了Seq.head,它可以从序列中获取第一个项目。
students.Rows |> Seq.head  

这是一个非常好的开始。您可以使用Seq模块中提供的其他函数来完成许多其他任务。如果您键入Seq,然后键入.,大多数编辑器都会显示出可用函数的自动完成列表(上面的文章记录了它们的功能)。

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


非常感谢您指引我到这篇文章。浏览实际的例子是我最喜欢的学习方式,而这篇文章对此非常有帮助。 - Joe J.H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接