2

我是编程新手,正在开发一个 C# 项目,该项目将搜索文本文件中的某些单词并将其替换为新值。我有一些有效的代码,但 OLD 和 NEW 值现在是硬编码的。我想使用外部 CSV 文件作为配置文件,以便用户可以在以后添加或更新 OLD 到 NEW 映射。这是我当前的代码,其中包含硬编码的 OLD 和 NEW 值:

try
{
    StreamReader file = new StreamReader(inputfullfilepath);
    TextWriter writer = new StreamWriter(outputfile);

    while ((line = file.ReadLine()) != null)
    {
        line = line.Replace("OLD1", "NEW1");
        line = line.Replace("OLD2", "NEW2");
        // etc....

        writer.WriteLine(line);
    }
    file.Close();
    File.Move(inputfullfilepath, inputfullfilepath + ".old");
    writer.Close();
    File.Move(outputfile, outputfilepath + @"\" + inputfilename);
    MessageBox.Show("File Scrub Complete", "Success");
}
catch
{
    MessageBox.Show("Error:  Be sure data paths are valid.", "Error", 
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}

该代码获取文本文件的每一行,尝试对所有 OLD 到 NEW 映射进行搜索/替换,然后转到文本文件中的下一行。我试图解决的问题是能够根据 CSV(或 XML,如果这样更容易?)配置文件使这个 OLD 到 NEW 映射列表动态化,以便用户可以添加新的搜索/替换关键字。

我尝试在 Visual Studio 中使用 C# 应用程序设置(它创建了一个 XML 配置文件),但我很难理解如何使其工作。这样做的最佳方法是什么,以便不必对值进行硬编码?

4

2 回答 2

0

一个 csv 文件可以正常工作。

我将创建一个名为 ReplaceObject 的新对象

public ReplaceObject()
{
public string original;
public string updated;

//ideally you'd use getters and setters, but I'll keep it simple
}

现在我们从 csv 中读取

List<ReplaceObject> replaceList = new List<ReplaceObject>

while (reader.peek != -1)
{
string line = reader.readln();

var splitLine = line.split(',');

ReplaceObject rObject = new ReplaceObject();

rObject.original = splitLine[0];
rObject.updated = splitLine[1];

replaceList.add(rObject);

}

现在我们浏览列表..并替换

string entireFile = //read all of it

foreach (ReplaceObject o in replaceList)
{
entireFile.Replace(o.original,o.updated);
}

//write it at the end

(请注意,我的代码缺少一些检查,但您应该明白这一点。您可能还想使用 StringBuilder)

于 2012-07-21T20:07:53.380 回答
0

我的建议是您使用Settings.csCSV 而不是

使用它们非常容易,并且涉及的代码非常少

e.g. Properties.Settings.Default.Old1;

这是一个演练http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

请参阅此示例,展示如何使用它http://www.codeproject.com/Articles/17659/How-To-Use-the-Settings-Class-in-C

于 2012-07-21T21:16:22.750 回答