F# 叉管

标签 f#

我有以下(工作)代码:

let a = 
    File.ReadAllLines("C:\ColorTable.dat")
    |> Array.filter (fun i -> i.StartsWith(" "))
    |> Array.iter (fun i -> 
        Console.WriteLine(@"ColorList.Add({0}, ""{1}"");", extract_num i, extract_col i)
        f.WriteLine(@"ColorList.Add({0}, ""{1}"");", extract_num i, extract_col i)
        )

函数 extract_num 和 extract_col 将正则表达式应用于文件行并提取其中的一部分。然后我将格式化字符串打印到控制台到文件。

为此,我将格式化部分写入两次。什么是更干净的方法来做到这一点?当然,我可以定义一个函数来接受 extract_num 和 extract_col 返回格式化字符串并调用它两次,但是,为了学习,最实用的方法是什么? p>

我不知道,我可以将格式化的字符串输出到控制台并通过某种管道 fork 输出到文件吗?

谢谢

最佳答案

这是一些代码...

open System.IO
let ComposeTextWriters (tws:TextWriter[]) =
    { new TextWriter() with 
        override this.Encoding = System.Text.Encoding.Default 
        override this.Write(c:char) =
            tws |> Array.iter (fun tw -> tw.Write(c)) }

let data = [(1,1); (2,2); (3,3)]

[<EntryPoint>]
let Main(_) =
    use fileToWrite = new StreamWriter(File.OpenWrite("out.txt")) :> TextWriter
    let stdout = System.Console.Out 
    let compositeOut = ComposeTextWriters [|fileToWrite;stdout|]
    data |> List.iter (fun (x,y) ->
        compositeOut.WriteLine("{0}: '{1}'", x, y))
    0

我不知道这是否是一个很好的方法,但它似乎有效。 ComposeTextWriters 将 TextWriter 数组作为输入,并返回一个新的 TextWriter,将所有输出写入其中。这是您正在寻找的东西吗?

关于F# 叉管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1147008/

相关文章:

algorithm - 使用 F# 在 Microsoft Solver 中添加约束

azure - 如何对 Flaky Azure 函数应用程序行为进行故障排除?

asp.net-mvc - FSharp.Core.sigdata 未与 FSharp.Core 一起找到

F# - splat/解包参数列表

f# - 可以访问计算表达式的参数吗?

f# - 具有不同方案的不同文件中的通用 Xml 的类型?

constructor - 使用构造函数初始化 F# 对象

f# - 如何使用 .Net Core 从 RSS 源获取项目?

f# - 缓存 XMLProvider 生成的模型

f#: program to calculate difference between dates