如何使用文本模板

本文关键字:文本 何使用 | 更新日期: 2023-09-27 18:12:41

我有一个页眉和页脚文本文件,这两个文件都很长,对于所有用例都是恒定的。我不想在代码中声明它或在运行时读取它们。

const string header = "some very long text in header";
const string footer = "some very long text in footer";
string content = "my CONTENT"; 
StringBuilder sb = new StringBuilder();
sb.Append(header);
sb.Append(content);
sb.Append(footer);
var allText = sb.toString(); // all text here

是否可以使用一些文本模板?然后在HTML中生成所有的信息,就像那些Mustache模板引擎一样?

示例:template.txt

some very long text in header
<%= content %>
some very long text in footer

输出
some very long text in header
my CONTENT
some very long text in footer

如何使用文本模板

您可以尝试使用Linq:

var header = File
  .ReadLines(@"C:'MyHeader.txt");
var footer = File
  .ReadLines(@"C:'MyFooter.txt");
var lines = header
  .Concat(new String[] {"My Content"})
  .Concat(footer);
...
var allText = String.Join(Environment.NewLine, 
  lines);

编辑:如果你有一个文件(不是一个好的做法),你可以使用Select()。例如,如果<%= content %>标记了应该为内容更改的行:

  var lines = File
    .ReadLines(@"C:'HeaderAndFooter.txt")
    .Select(line => line == "<%= content %>" ? "MyContent" : line);
  ...
  var allText = String.Join(Environment.NewLine, 
      lines);

我建议为此目的使用Razor view Engine ASP。净剃刀

此工程不限于处理HTML文件。可用于所有文本文件

如果你想创建模板,你可以使用Antlr4.StringTemplate,这是你想要的,默认情况下,它使用'<'和'>'或'$'作为分隔符