使用 System.IO.File.ReadAllText 反转 .txt 文件

Using System.IO.File.ReadAllText to reverse a .txt-file

因此,我正在尝试编写一个包含 .txt 文件列表的代码,我希望得到的输出是控制台吐出文件的内容,附加的和反向的。我知道你可以使用 System.IO.File.ReadAllText 来吐出文件的文本,但是有没有一种好方法可以吐出文件的内容,但是反过来呢?

我有一个看起来像这样的 readFile 命令

module readNWrite
open System.IO

let readFile (filename : string) : string option =
    if File.Exists filename then
       Some (File.ReadAllText filename)
    else None

到目前为止,我的反向打印文件列表的代码如下所示

let tac (filenames : string list) : string option =
    let rec help (helpLst : string list) (helpStr : string) :string option =
        match helpLst.rev with
            | [] -> Some (helpStr)
            | head :: tail -> match readFile (head) with
                                | None -> None
                                | Some(x) -> help (tail) (helpStr + x)
    help filenames ""

它只是吐出附加的 .txt 文件。

如果我真的想这样做,而不仅仅是为了教育目的,我可能会写这样的东西:

open System
open System.IO

for file in files do
  let contents = File.ReadAllText(file).ToCharArray()
  let reversed = String(Array.rev contents)
  printfn "%s" reversed
  • 代码没有使用递归。如果您正在学习递归,那么反转列表是一个有趣的问题。实际上,您可以使用内置函数完成大部分事情。
  • 它有一个命令式 for 循环。但是程序的重点是必须的——打印——所以没有理由不这样做。
  • 您可以使用 Seq.rev 的更优雅的管道(它直接作用于字符串),但我使用的是一个数组,然后将它转回单个字符串,因为我认为这通常更高效。