Практически все, что вам нужно сделать, это заменить имя типа в объявлениях переменных (где вы могли бы написать var
в C #) на ключевое слово let
, удалить все точки с запятой и фигурные скобки и заменить foreach
на
for file in files do
.Вы также используете некоторые пространства имен, поэтому в F # вам нужно что-то вроде:
open System.IO
open System.Text.RegularExpressions
Вы используете одну изменяемую переменную (content
), но вам не нужно ее изменять.Вы можете просто использовать другую переменную (например, newContent
), чтобы сохранить результат замены.Итак, средняя часть будет выглядеть так:
let content = File.ReadAllText(file) // No need for a stream reader here!
let pattern = @"Script Date: \d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}"
let replace = "Script Date: "
let newContent = Regex.Replace(content, pattern, replace)
Вы также можете использовать то же имя переменной, что означает, что вы объявляете новую (неизменяемую) переменную, которая скрывает предыдущую в остальной части области видимости.(см. этот ответ SO для получения дополнительной информации )
Я бы также изменил последний бит (даже в C #!), чтобы закрыть поток, даже если возникает исключение.В C # вы бы использовали using
.Чтобы написать то же самое в F #, вы можете использовать ключевое слово use
:
use fileStream = new FileStream(file, FileMode.Truncate, FileAccess.Write, FileShare.None)
use writer = new StreamWriter(fileStream, Encoding.Unicode)
writer.Write(content)
writer.Flush()
Ключевое слово use
гарантирует, что объект удаляется (закрывается), когда он выходит из области видимости, то естьв конце итерации цикла for
(в данном случае).