使用 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
的更优雅的管道(它直接作用于字符串),但我使用的是一个数组,然后将它转回单个字符串,因为我认为这通常更高效。
因此,我正在尝试编写一个包含 .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
的更优雅的管道(它直接作用于字符串),但我使用的是一个数组,然后将它转回单个字符串,因为我认为这通常更高效。