Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File F-Sharp中的文件替换_File_Replace_F# - Fatal编程技术网

File F-Sharp中的文件替换

File F-Sharp中的文件替换,file,replace,f#,File,Replace,F#,我需要在fsharp中制作一个程序,用另一个字符串“replace”替换输入文本文件中所有出现的字符串“needle”。这个问题的一个很好的解决方案已经发布在这里: 不幸的是,我的程序必须显式地使用前面提到的解决方案没有的函数System.IO.File.OpenText、ReadLine和WriteLine 我看不出这是如何以一种有效而不费解的方式做到的。问题是,如果使用System.IO.File.OpenText打开输入文件,则无法同时读取和写入该文件。但是我们需要写作来替换前面提到的针

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

不幸的是,我的程序必须显式地使用前面提到的解决方案没有的函数System.IO.File.OpenTextReadLineWriteLine

我看不出这是如何以一种有效而不费解的方式做到的。问题是,如果使用System.IO.File.OpenText打开输入文件,则无法同时读取和写入该文件。但是我们需要写作来替换前面提到的针参数。那怎么办呢?您是否需要创建另一个临时文件,以只写方式打开它,然后使用等于system.IO.file.OpenText.readLine的输入对其执行写线操作?这似乎太复杂了

如果有人需要,我将在下面添加具体任务:

用F语言编写程序#

它使用文件名为filename的文件中的replace参数替换所有出现的needle参数。解决方案必须至少使用函数System.IO.File.OpenTextReadLineWriteLine来访问文件

必须包括一个简短的测试和对解决方案的简短描述,以及为达到给定解决方案而采取的更大设计选择的参数


为了在不给出全部答案的情况下帮助您,下面的示例演示了如何使用作业中提到的函数处理文件

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

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()
opensystem.IO
让fileIn=File.OpenText(“C:\\Temp\\testin.txt”)
让fileOut=File.CreateText(“C:\\Temp\\test out.txt”)
让可变行=fileIn.ReadLine()
而行空则执行
fileOut.WriteLine(行)

行如何打开文件,读取内容,关闭它,替换内存中必要的字符串,然后写回内容。一种可能的解决方案是将整个文件读入内存,然后执行替换,然后将结果写回文件。我考虑使用Readline一次读取一行,并将每个结果字符串保存到一个数组中。然后,我们可以对数组中的每个字符串执行replace方法,最后创建一个与旧文件同名的新文件,并开始使用Writeline将每个字符串写入该文件。这就是你所想的吗?谢谢你坦率地告诉我这是一项任务;它帮助我们知道帮助你的最佳方式。(也就是说,不要发布代码,而是给你答案的提示,这样你就可以自己找出答案)。我见过很多关于堆栈溢出的“请帮我做家庭作业”问题,而且很少有人会直接说这是家庭作业(尽管这通常很明显)+感谢你坦率地回答这个问题,这使得这个问题比你没有提到这个事实要好得多。
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()