gpt4 book ai didi

F# 将映射输入写入输出

转载 作者:行者123 更新时间:2023-12-01 14:01:55 24 4
gpt4 key购买 nike

我是 F# 的新手,正从一个简单的项目开始。

我处理的 txt 文件很大——通常大约有 1000 万条记录。我想做的是读取文件,过滤掉一些特定的行,将字段映射为仅从原始文件中获取列的子集,然后输出结果。

我有两个问题:

  1. 如何根据 map 进行过滤。该文件有大约 30 个字段。
  2. 如何获取 map 的输出并将其写入新的 TXT 文件

//Open the file 
let lines = seq {use r = new StreamReader(kDir + kfName )
while not r.EndOfStream do yield r.ReadLine() }

//Filter the file
let sFilt = "Detached Houses,Upper Middle"
let out1 = lines
|> Seq.filter (fun x -> x.Contains(sFilt))

//Write out the filtered file - this works great
//val out1 : seq<string>
File.WriteAllLines("c:\\temp\\out1.txt", out1 )


//Here is where I have an issue
//I am trying to just get 2 of the columns to an output file
//val out2 : seq<string * string> - this has a different patter than out1
let out2 = out1 |> Seq.map (fun x2 -> x2.Split[|','|])
|> Seq.map (fun x3 -> x3.[0], x3.[3])

我在这一行收到以下错误 - 我知道 out1 和 out2 不同。我该如何解决这个差异?

错误信息:

Possible overload: 'File.WriteAllLines(path: string, contents: IEnumerable<string>) : unit'. Type constraint mismatch. The type seq<string * string> is not compatible with type IEnumerable<string>
The type 'string' does not match the type 'string * string'.

最佳答案

您可以做的是映射回 seq<string>来自你的 seq<string*string> .

Seq.map (fun (str1, str2) -> sprintf "%s, %s" str1 str2)

您可以将其添加到您现有的 map 操作链中

let out2 = 
out1
|> Seq.map (fun x2 -> x2.Split[|','|])
|> Seq.map (fun x3 -> x3.[0], x3.[3])
|> Seq.map (fun (str1, str2) -> sprintf "%s, %s" str1 str2)

然后,您又得到了一个可以写入文件的字符串序列。

关于F# 将映射输入写入输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33556113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com