我正在使用 .NET Core 1.1 并且需要在运行时创建一个文本文件。例如:
import MyLib
a = 5
MyLib.doSomeStuff(a)
我唯一需要做的就是创建一个文本文件,但其中的值a
是由我的 C# 代码中完成的一些计算给出的。理想情况下,我希望在我的C#代码中具有与此类似的内容:
// Variable to pass to be set on the script
int a = 5;
// Create the Python script and save to some .py file
CreatePythonScript(a);
请注意,这是一个最小的示例。实际上,我的脚本有数百行和数百个变量,因此手动编写文本文件并连续调用Write()
不会那么聪明。
我检查了 T4 框架,但我认为这不是我需要的。我可以用什么来做这个?
您可以编写一个包含一些巧妙定义的占位符的示例文件,从那时起,它只是一个替换所有操作。
例如:
import MyLib
a = `a`
MyLib.doSomeStuff(a)
因此,您需要做的是找出如何插入占位符,从而生成在文本中无法找到的字符串,因此您不会替换任何不应替换的内容。在这个例子中,(我根本不懂 Python)假设反引号 (`) 永远不会出现,你可以使用它们作为前缀、后缀或将部分完全包装到应该插入动态值的位置。您还必须考虑在极端情况下可能出现的特殊部分:注释、字符串文字等。
还有一点要注意的是,你的逻辑应该优先考虑占位符,这样如果有一个占位符是另一个占位符的前缀,那么你必须先替换较长的,否则替换较短的会使较长的无效一。请注意,如果您没有前缀或后缀,而是用通常不会出现的字符包裹部分,那么一个占位符永远不会成为另一个占位符的前缀/后缀。
话虽如此,如果模板简单,我只建议选择一种简单明了的方法,否则,您当然应该寻找专用工具。
一个例子:
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]);
}
}
此逻辑只是读取整个模板,并用值替换占位符。字典的键是占位符(与前缀或后缀或前+后缀一起)。
“更多内容如下”的详细信息:
§§§a§§§
。您使用的字符越不常见,替换您不想要的内容(例如,在评论中)的可能性就越低。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句