クリーンな定義済みのプレースホルダを使用してサンプルファイルを作成するだけで、それ以降のすべての操作を置き換えることができます。例えば
:だから
import MyLib
a = `a`
MyLib.doSomeStuff(a)
、あなたはそれがそうでない場合は、テキスト内に見つかりませんでした文字列になりようにプレースホルダを挿入することができる方法を見つけるされなければならないので、あなたがいない何をすべきか交換してはならないものを交換してください。この例では、バックティック( `)が決して出現しないと仮定して(私はPythonを全く知らない)、接頭辞、接尾辞、または動的値を挿入する部分に完全にラップするために使用することができます。コメント、文字列リテラルなどの特殊な部分も考慮する必要があります。
もう1つ注目すべきは、ロジックがプレースホルダに優先順位を付ける必要があります。他のプレフィックスのプレースホルダである場合は、最初に長いプレースホルダを置き換える必要があります。そうでない場合は、短いものを置き換えることで長いものを無効にします。接頭辞または接尾辞を付けない場合は、を入れてください。通常は表示されない文字の部分は、別の接頭辞/接尾辞にすることはできません。
これらのことから、私は、テンプレートが単純な場合は単純かつ単純なアプローチを選択することを推奨します。そうでなければ、確かに専用のツールを探すべきです。
例:
Dictionary<string, string> keysAndReplacements = new Dictionary<string, string>();
// Initialize the dictionary here.
// Custom logic to perform key prioritization. More on it below.
IEnumerable<string> prioritizedKeys = PrioritizeKeys(keysAndReplacements.Keys);
using (StreamReader reader = new StreamReader(@"C:\sample.txt"))
{
string allText = reader.ReadToEnd();
foreach (string key in prioritizedKeys)
{
allText = allText.Replace(key, keysAndReplacements[key]);
}
}
このロジックは、単に全体のテンプレートを読み込み、値のプレースホルダを置き換えます。辞書のキーは、プレースホルダ(プレフィックスまたは接尾辞またはプレフィックス付き)です。
「以下、その上より」の詳細:
- 私が言ったように、プレースホルダのための両方の接頭辞と接尾辞がある場合は、その後、(接頭辞と接尾文字を想定してそう思われることはありません)それは不可能です衝突が発生する。
- キーの長さを降順に並べ替えると、より長いキーが最初に始まるため、プレースホルダがまったく同じ場合にのみ衝突が発生する可能性があります。辞書は重複したキーを許可しないので、同じキーを2回追加しようとすると問題になります。
- 安全のために、最初と最後に1-1文字を使用しないでください。いくつかのラッパーを使用して、文字列が実際に置き換えられない場所で発生する可能性を減らします。例:
§§§a§§§
。あまり一般的ではない文字を使用すると、たとえばコメントなど、望ましくないものを置き換える可能性が低くなります。
T4には何が欠けていましたか? –
さて、私はテンプレートを持つテキストファイルを持っていて、そこにいくつかの_placeholders_を持っています。そうすれば、ファイル全体を読み込み、プレースホルダーを値に置き換えて結果を別のファイルに書き込むだけです。 – Pikoh
この[RazorLight](https://github.com)を見てください/ toddams/RazorLight)コアで動作します –