使用模板在运行时生成文本文件

马纳塔

我正在使用 .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]);
    }
}

此逻辑只是读取整个模板,并用值替换占位符。字典的键是占位符(与前缀后缀前+后缀一起)。

“更多内容如下”的详细信息:

  • 正如我所说,如果占位符同时存在前缀和后缀,那么(假设前缀和后缀字符不会出现)就不可能发生冲突。
  • 最直接的实现是按键长度降序排序,因为然后您首先从较长的键开始,因此只有在占位符完全相同的情况下才会发生冲突(好吧,这甚至不是冲突)。由于 Dictionary 不允许重复的键,如果您尝试两次添加相同的键,您会遇到麻烦。
  • 为安全起见,不要只在开头和结尾使用 1-1 个字符。使用多个包装器,以减少字符串出现在您实际上不希望它被替换的地方的机会。例如:§§§a§§§您使用的字符越不常见,替换您不想要的内容(例如,在评论中)的可能性就越低。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在运行时动态解析.proto文本文件以生成描述符

在运行时生成文字

使用Python将硒结果/输出在运行时保存在文本文件中

从 VBA EXCEL 运行 cmd 后未生成文本文件的组合

在运行时生成JAR文件

如何使用Javascript生成文本文件并下载zip文件?

AWS CLI生成文本文件?

Python Flask 生成文本文件

从字符集生成文本文件

使用Excel VBA写入文本文件的两种方法:Microsoft标准库与Microsoft脚本运行时

运行时对CMake中生成文件的依赖

如何从父文本文件开始生成文本文件

如何在python中使用sql查询生成文本文件?

使用XSLT格式化XML转换的输出以生成文本文件

使用Ruby解析xml内容并生成文本文件

从cron运行时,为什么此脚本没有输出到文本文件?

在iPhone上运行时,Objective C无法读取文本文件

Java在尝试读取文本文件时遇到运行时错误

如何在运行时从文件加载 HTML 模板?

Actionscript - 带有外部文本文件的 TLFTextField,文件运行时不显示任何内容

Java在运行时生成类文件

在运行时使用生成的TwiML文件进行可编程调用

运行时错误1004 Excel无法找到文本文件来刷新此外部范围

创建一个每次在C中运行时都不同的文本文件名

VBA 运行时错误 3625 文本文件规范 Export_Spec 不存在

使用Javascript在运行时生成节点/ div ID

使用Room Persistance在运行时生成查询

使用Dart在运行时/编译时生成类

使用Kivy在运行时生成标签