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 へのマッピングをすべて検索/置換してから、テキスト ファイルの次の行に移動します。私が理解しようとしている問題は、この OLD から NEW へのマッピングのリストを、CSV (または XML の方が簡単な場合は XML) 構成ファイルに基づいて動的に作成できるため、ユーザーは新しい検索/置換キーワードを追加できることです。

Visual Studio (XML 構成ファイルを作成する) で C# アプリケーション設定を使用しようとしましたが、それを機能させる方法を理解するのに非常に苦労しました。値をハードコーディングする必要がないように、これを行う最善の方法は何ですか?

4

2 に答える 2

0

私の提案はSettings.cs、CSVの代わりに使用することです

それらを使用するのは非常に簡単で、非常に少ないコードで済みます

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 に答える
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 に答える