文字列を1行ずつ変更する単純なPythonユーティリティコードがあります。コードは次のとおりです。
import re
res = ""
with open("tclscript.do","r") as f:
lines = f.readlines()
for l in lines:
l = l.rstrip()
l = l.replace("{","{{")
l = l.replace("}","}}")
l = re.sub(r'#(\d+)', r'{\1}',l)
l += r'\n'
res += l
res = "code="+res
with open("tclscript.txt","w") as f:
f.write(res)
F#で実装されたユーティリティはどのようになりますか?このPythonバージョンよりもLOCが短く、読みやすいでしょうか?
追加した
Pythonコードは、C#文字列のtclスクリプトを処理します。C#文字列の「{'/'}」は「{{'/'}}」に変更し、「#」の後の数字は「{}」で囲まれた数字に変更する必要があります。たとえば、#1->{1}です。
追加した
これは実際の例です
open System.IO
open System.Text.RegularExpressions
let lines =
File.ReadAllLines("tclscript.do")
|> Seq.map (fun line ->
let newLine = Regex.Replace(line.Replace("{", "{{").Replace("}", "}}"), @"#(\d+)", "{$1}") + @"\n"
newLine )
let concatenatedLine = Seq.toArray lines |> String.concat ""
File.WriteAllText("tclscript.txt", concatenatedLine)
または、この回答で説明されているように。
open System.IO
open System.Text
let lines =
let re = System.Text.RegularExpressions.Regex(@"#(\d+)")
[|for line in File.ReadAllLines("tclscript.do") ->
re.Replace(line.Replace("{", "{{").Replace("}", "}}").Trim(), "$1", 1) + @"\n"|]
let concatenatedLine = lines |> String.concat ""
File.WriteAllText("tclscript.txt", concatenatedLine)