Tôi chỉ mới bắt đầu làm việc với F # và cố gắng hiểu các nguyên mẫu điển hình và cách suy nghĩ và làm việc hiệu quả.Chuyển đổi tập tin trong F #
Nhiệm vụ trong tay là một biến đổi đơn giản của tệp được phân tách bằng tab thành tệp được phân cách bằng dấu phẩy. Một dòng đầu vào điển hình sẽ trông giống như:
let line = "@ES# 01/31/2006 13:31:00 1303.00 1303.00 1302.00 1302.00 2514 0"
Tôi bắt đầu với vòng lặp mã như thế này:
// 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)
sau đó tôi thay thế các cặp chia/concat hoạt động với một Regex.Replace đơn():
for line in File.ReadLines(inFile) do
let transformedLine = Regex.Replace(line, "\t",",")
outFile.WriteLine(transformedLine)
Và bây giờ, cuối cùng, đã thay thế vòng lặp với một đường ống dẫn:
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
Trong khi tất cả các phiên bản hoạt động, phiên bản cuối cùng dường như là trực quan nhất. Đây có phải là cách một lập trình viên F # giàu kinh nghiệm thực hiện nhiệm vụ này không?
Tôi sẽ làm giống như cách bạn đã làm nó –
Tôi sẽ bỏ qua chức năng ẩn danh trên dòng cuối cùng của phiên bản thứ ba của bạn và chỉ cần làm điều này: '|> Seq.iter outFile.WriteLine' –
Đó là một điều rất hay [và, ** nhìn lại **, rõ ràng] đơn giản hóa. cảm ơn! – akucheck