gpt4 book ai didi

F-Sharp 中的文件替换

转载 作者:行者123 更新时间:2023-12-02 02:55:40 28 4
gpt4 key购买 nike

我需要在 fsharp 中制作一个程序,将输入文本文件中所有出现的字符串“needle”替换为另一个字符串“replace”。这个问题的一个很好的解决方案已经发布在这里:

F# - fileReplace, overwriting words in txt, but when running it overwrites exisiting content in txt

不幸的是,我的程序必须显式使用上述解决方案所做的函数 System.IO.File.OpenTextReadLineWriteLine不是。

我看不出如何以有效且简单的方式完成此操作。问题是,如果您使用 System.IO.File.OpenText 打开输入文件,那么您不能同时读取和写入该文件。但是我们需要写来替换前面提到的 needle 参数。那怎么办呢?您是否需要制作另一个临时文件,以只写方式打开它,然后使用等于 system.IO.FILe.OpenText.readLine 的输入对其执行 WriteLine?这似乎太复杂了。

如果有人需要,我会在下面添加具体的作业:

Make a program in F#

 fileReplace : string -> needle : string -> replace: string -> unit

which replaces all occurrences of the needle argument with the replace argument in the file with name filename. The solution must as a minimum use the functions System.IO.File.OpenText, ReadLine and WriteLine to access the files.

A short test must be included and a short description of the solution with arguments for larger design choices taken to reach the given solution

最佳答案

为了在不给出完整答案的情况下为您提供一些帮助,以下示例展示了如何使用作业中提到的函数来处理文件。

它实现了一个简单的代码片段,逐行从一个文本文件中读取数据并将数据(不替换任何内容)写入另一个文件:

open System.IO

let fileIn = File.OpenText("C:\\Temp\\test-in.txt")
let fileOut = File.CreateText("C:\\Temp\\test-out.txt")

let mutable line = fileIn.ReadLine()
while line <> null do
fileOut.WriteLine(line)
line <- fileIn.ReadLine()

fileIn.Close()
fileOut.Close()

这里的棘手之处在于 ReadLine 在文件末尾返回 null。以一种很好的函数式方式处理这个问题并不是很好,所以我只使用了可变变量和 while 循环,但你可以使用递归或列表理解来做同样的事情。

这从一个文件中读取数据并将其逐行写入另一个文件。这避免了将所有内容读入内存的需要,但这意味着您需要两个文件,因为您不能(使用这些函数)在读取文件时覆盖文件。

要解决您的问题,您可以创建一个临时文件,然后用新文件替换原来的文件,或者您可以在替换之前将所有数据读入内存。

关于F-Sharp 中的文件替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49583888/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com