我剛開始使用F#並試圖理解典型的idoms和有效的思維和工作方式。F#中的文件轉換#
手頭的任務是將製表符分隔的文件簡單轉換爲逗號分隔的文件。一個典型的輸入線將看起來像:
let line = "@ES# 01/31/2006 13:31:00 1303.00 1303.00 1302.00 1302.00 2514 0"
我開始了循環這樣的代碼:
// inFile and outFile defined in preceding code not shown here
for line in File.ReadLines(inFile) do
let typicalArray = line.Split '\t'
let transformedLine = typicalArray |> String.concat ","
outFile.WriteLine(transformedLine)
我再換成分流/的concat操作對與單個Regex.Replace():
for line in File.ReadLines(inFile) do
let transformedLine = Regex.Replace(line, "\t",",")
outFile.WriteLine(transformedLine)
而現在,終於,更換了管道的循環:
File.ReadLines(inFile)
|> Seq.map (fun x -> Regex.Replace(x, "\t", ","))
|> Seq.iter (fun y -> outFile.WriteLine(y))
// other housekeeping code below here not shown
儘管所有版本都有效,但最終版本在我看來最直觀。這是一個更有經驗的F#程序員如何完成這項任務嗎?
我會以同樣的方式做到這一點 –
我會在第三個版本的最後一行忽略匿名函數,只是這樣做:'|> Seq.iter outFile.WriteLine' –
這是一個非常好的[和, **回顧**,明顯的]簡化。謝謝! – akucheck