Jac*_*cco 2 c# f# guard-clause c#-to-f#
我有一个txt文件,其中包含数字和逗号分隔的行,例如.
4324,1dd3,444
4324,1fd3,444
4324,1as3,442
我有一个函数,它接受一个字符串作为参数,我想检查每一行,如果该字符串等于该行的第二个"字",所以第一行将是"1dd3".如果该参数匹配单词我想将行的第三个单词添加到字符串列表中(或者以其他方式保存它以便稍后在代码中使用它).
在C#中,我只是遍历列表并在逗号上使用这样的分割
while(reader.Peek > 0) //while txt file still has lines left to read
{
split the row...
compare it to argument
add to list of strings
}
Run Code Online (Sandbox Code Playgroud)
但我对F#相当新,并且在这里找不到正确的语法和/或方法,任何帮助都将不胜感激.
kae*_*fer 13
您可以首先尝试确定1)要操作的适当数据结构,以及2)是否已经预定义的库函数已经完成了所需的操作.在这种情况下,我不会浪费时间逐行读取文件,而是立即读取所有文件.所以它是一个运行的阵列.
该函数需要在数组的所有元素上应用选择器,例如滤镜和投影的组合.因此,Array.pick/Array.tryPick如果您只对第一次出现感兴趣,或者Array.choose检索谓词为真的所有实例.现在,我们所做的只是使用保护条款进行模式匹配,以检查您的情况.
let findTextInFile nameOfFile txtToSearch =
System.IO.File.ReadAllLines nameOfFile
|> Array.choose (fun s ->
match s.Split ',' with
| [| _; y; z |] when y = txtToSearch -> Some z
| _ -> None )
findTextInFile @"c:\temp\xxx" "1dd3"
// val it : string [] = [|"444"|]
Run Code Online (Sandbox Code Playgroud)