从文本文件中读取文本和变量 C#
Reading text and variables from text file c#
我有以下代码尝试从文本文件中读取数据(以便用户可以轻松修改)并根据文本文档中的单词和表单中的变量自动设置段落格式。我将文件 "body" 放入字段中。我的正文文件中包含以下数据
"contents: " + contents
我希望以此为基础得到
contents: Item 1, 2, etc.
基于我的输入。尽管放置了“”,但我只能准确地了解文本文档中的内容。我究竟做错了什么?我希望除了我的文本之外还能得到变量。
string readSettings(string name)
{
string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Yuneec_Repair_Inv";
try
{
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader(path + "/" + name + ".txt"))
{
string data = sr.ReadToEnd();
return data;
}
}
catch (Exception e)
{
// Let the user know what went wrong.
Console.WriteLine("The settings file for " + name + " could not be read:");
Console.WriteLine(e.Message);
string content = "error";
return content;
}
}
private void Form1_Load(object sender, EventArgs e)
{
createSettings("Email");
createSettings("Subject");
createSettings("Body");
yuneecEmail = readSettings("Email");
subject = readSettings("Subject");
body = readSettings("Body");
}
private void button2_Click(object sender, EventArgs e)
{
bodyTextBox.Text = body;
}
当您从文件中以字符串形式读取文本时,您得到的只是一串文本。
系统中没有任何部分假定它是 C#,在当前范围内解析、编译和执行它,将结果转换为文本并为您提供结果。
这在很大程度上不是人们想要的,并且会带来很大的安全风险 - 您最不想做的就是在没有检查的情况下从程序外部执行任意代码。
如果您需要模板引擎,则需要构建一个 - 例如读入字符串,处理字符串以查找关键字,例如%content%
,然后在原处添加数据——或者找个模板处理库集成。
如果您想为您的用户提供自定义文本某些部分的能力,您应该使用一些您事先知道的 "indicator",可以搜索和解析出来,就像介于两者之间的一切@ 和 @ 是您将作为字符串读取的内容。
你好@Mr Douglas@,
今天是@DayOfTheWeek@.....
此时您的用户可以在 @ 和 @ 符号之间替换他们需要的任何内容,您阅读它(例如使用正则表达式)并将其用作您的 "variable" 文本。
如果这就是您想要的,请告诉我,我可以提供一些 C# 代码作为示例。
好的,这是示例代码:
StreamReader sr = new StreamReader(@"C:\temp\settings.txt");
var set = sr.ReadToEnd();
var settings = new Regex(@"(?<=\[)(.*?)(?=\])").Matches(set);
foreach (var setting in settings)
{
Console.WriteLine("Parameter read from settings file is " + setting);
}
Console.WriteLine("Press any key to finish program...");
Console.ReadKey();
这是文本文件的来源:
你好 [MrReceiver],
这是 [Company] 的 [User] 其他人,用这个作为例子不是很通用 :)
[签名]
希望对您有所帮助!
我有以下代码尝试从文本文件中读取数据(以便用户可以轻松修改)并根据文本文档中的单词和表单中的变量自动设置段落格式。我将文件 "body" 放入字段中。我的正文文件中包含以下数据
"contents: " + contents
我希望以此为基础得到
contents: Item 1, 2, etc.
基于我的输入。尽管放置了“”,但我只能准确地了解文本文档中的内容。我究竟做错了什么?我希望除了我的文本之外还能得到变量。
string readSettings(string name)
{
string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Yuneec_Repair_Inv";
try
{
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader(path + "/" + name + ".txt"))
{
string data = sr.ReadToEnd();
return data;
}
}
catch (Exception e)
{
// Let the user know what went wrong.
Console.WriteLine("The settings file for " + name + " could not be read:");
Console.WriteLine(e.Message);
string content = "error";
return content;
}
}
private void Form1_Load(object sender, EventArgs e)
{
createSettings("Email");
createSettings("Subject");
createSettings("Body");
yuneecEmail = readSettings("Email");
subject = readSettings("Subject");
body = readSettings("Body");
}
private void button2_Click(object sender, EventArgs e)
{
bodyTextBox.Text = body;
}
当您从文件中以字符串形式读取文本时,您得到的只是一串文本。
系统中没有任何部分假定它是 C#,在当前范围内解析、编译和执行它,将结果转换为文本并为您提供结果。
这在很大程度上不是人们想要的,并且会带来很大的安全风险 - 您最不想做的就是在没有检查的情况下从程序外部执行任意代码。
如果您需要模板引擎,则需要构建一个 - 例如读入字符串,处理字符串以查找关键字,例如%content%
,然后在原处添加数据——或者找个模板处理库集成。
如果您想为您的用户提供自定义文本某些部分的能力,您应该使用一些您事先知道的 "indicator",可以搜索和解析出来,就像介于两者之间的一切@ 和 @ 是您将作为字符串读取的内容。
你好@Mr Douglas@,
今天是@DayOfTheWeek@.....
此时您的用户可以在 @ 和 @ 符号之间替换他们需要的任何内容,您阅读它(例如使用正则表达式)并将其用作您的 "variable" 文本。
如果这就是您想要的,请告诉我,我可以提供一些 C# 代码作为示例。
好的,这是示例代码:
StreamReader sr = new StreamReader(@"C:\temp\settings.txt");
var set = sr.ReadToEnd();
var settings = new Regex(@"(?<=\[)(.*?)(?=\])").Matches(set);
foreach (var setting in settings)
{
Console.WriteLine("Parameter read from settings file is " + setting);
}
Console.WriteLine("Press any key to finish program...");
Console.ReadKey();
这是文本文件的来源:
你好 [MrReceiver],
这是 [Company] 的 [User] 其他人,用这个作为例子不是很通用 :)
[签名]
希望对您有所帮助!