2017-03-16 7 views
1

私はFAKEには新しく、下記のようにFAKEで何かを実装しようとしています: 私は100行以上のファイルを持っています。コード、2行目をIFR.SIIC._0.12に変更したいとしましょう。 IFR.SIIC._0.45与えられたファイルのテキストを置き換えます - FAKE F#MAKE

どうすればよいですか? ReplaceInFileまたはRegexReplaceInFileWithEncodingを使用してこれを行いますか?

答えて

3

あなたに役立つ機能はたくさんあります。どちらを選択するかは、コードを書く方法によって異なります。たとえば、ReplaceInFileファンクションを指定しますが、RegexReplaceInFileWithEncodingには正規表現(文字列の形式で、Regexオブジェクトではありません)を指定する必要があります。置き換えたいテキストによっては、他のテキストより簡単かもしれません。たとえば、あなたがそうのようReplaceInFile使用することができます

たとえば、あなたがちょうど 単一ファイルで、一致させたい 特定文字列のセットを持っている、あれば便利だろう
Target "ChangeText" (fun _ -> 
    "D:\Files\new\oneFile.txt" // Note *no* !! operator to change a single file 
    |> ReplaceInFile (fun input -> 
     match input with 
     | "IFR.SIIC._0.12" -> "IFR.SIIC._0.45" 
     | "another string" -> "its replacement" 
     | s -> s // Anything else gets returned unchanged 
    ) 
) 

。しかし、より簡単な関数ReplaceInFiles(複数に注意してください)は、複数のファイルを一度に複数のファイルに置き換えることができます。また、ファンクションをパラメータとして使用する代わりに、ReplaceInFilesは、のシーケンス(old,new)のペアにします。これは、多くの場合、書き込みをする方が簡単です:

let stringsToReplace = [ 
    ("IFR.SIIC._0.12", "IFR.SIIC._0.45") ; 
    ("another string", "its replacement") 
] 
Target "ChangeText" (fun _ -> 
    !! "D:\Files\new\*.txt" 
    |> ReplaceInFiles stringsToReplace 
) 

フォーム、正規表現での検索や交換の文字列を指定したい場合は、あなたが複数の点に注意してください(RegexReplaceInFileWithEncodingまたはRegexReplaceInFilesWithEncodingをしたいと思います:前者は、1つのファイルを取ります後者は複数のファイルを取ります)。あなたはABC.WXYZ._0.45IFR.SIIC._0.45ABC.WXYZ._0.12IFR.SIIC._0.12を変更することができるようになる

Target "ChangeText" (fun _ -> 
    !! "D:\Files\new\*.txt" 
    |> RegexReplaceInFilesWithEncoding @"(?<part1>\w+)\.(?<part2>\w+)\._0\.12" 
             @"${part1}.${part2}._0.45" 
             System.Text.Encoding.UTF8 
) 

:私はちょうどあなたに複数のファイルのバージョンの例を紹介します。

どのファイルをどれだけ使用するかは、ファイルの数と必要な置換文字列の数(正規表現を書き込むのがどれほど難しいか)によって決まります。

+0

すてきな答えをありがとう:) – KMittal

+0

こんにちはrmunn:文字列を持つ変数から文字列を置き換えたいです。 など: @ "admintool:RBI.ICISApi.AdminTool _" + version_no バインディングで予期しない見積もり記号が表示される – KMittal

+0

@KMittal - おそらくF#コードの構文エラーです。全体の機能を見ることなくあなたの質問に答えることはできません。新しい質問を開き、もう一度質問し、コードサンプルを必ず含めてください。エラーのある関数全体を表示し、 '{}'ボタンで正しくインデントすることを忘れないでください。 – rmunn

関連する問題