从文本文件中读取文本和变量c#

时间:2015-09-21 23:26:29

标签: c# visual-studio variables streamreader

我有以下代码尝试从文本文件中读取数据(以便用户可以轻松修改)并根据文本文档中的单词加上表单中的变量自动格式化段落。我有文件" body"进入一个领域。我的正文文件中包含以下数据

  

"内容:" +内容

我希望在此基础上获得

  

内容:第1,2项等

根据我的输入。我只是在文本文档中得到了确切的内容,尽管放了""。我究竟做错了什么?我希望除了我的文本之外还能获得变量。

 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;
        }

2 个答案:

答案 0 :(得分:3)

如果您想为用户提供自定义文本某些部分的功能,您应该使用一些"指示符"你事先知道的,可以搜索和解析,像@和@之间的所有内容都是你将读作字符串的东西。

你好@Mr Douglas @,

今天是@DayOfTheWeek @ .....

此时,您的用户可以在@和@符号之间替换他们需要的任何内容,然后您阅读它(例如使用正则表达式)并将其用作"变量"文本。

让我知道这是否是您所追求的,我可以提供一些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],

这是来自[公司]的[用户]其他东西,并不是非常通用,以此为例:)

[签名]

希望这有帮助!

答案 1 :(得分:0)

当您从文件中读取文本作为字符串时,您将获得一串文本,仅此而已。

系统中没有任何部分假定它是C#,在当前范围内解析,编译和执行它,将结果转换为文本并为您提供结果。

这大部分都不是人们想要的,并且会带来很大的安全风险 - 你最不希望的是从程序外部执行任意代码而不进行检查。

如果你需要一个模板引擎,你需要构建一个 - 例如读入字符串,处理字符串以查找关键字,例如%content%,然后将数据添加到它们所在的位置 - 或者找到模板处理库并进行集成。