2012-07-21 49 views
1

我是編程新手,正在研究C#項目,該項目將使用新值搜索和替換文本文件中的某些單詞。我有一些可行的代碼,但舊的和新的值現在被硬編碼。我想使用外部CSV文件作爲配置文件,以便用戶以後可以添加或更新OLD到NEW映射。這是我當前的代碼與舊的和新的價值觀硬編碼:根據C#中的CSV文件中的映射搜索並替換文本文件的內容

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

代碼採用文本文件的每一行,試圖做一個查找/替換所有舊到新的映射,然後進入下一行在文本文件中。我試圖包裹我的頭的問題是能夠基於CSV(或XML,如果這樣會更容易?)配置文件使舊的映射動態列表爲NEW動態映射,以便用戶可以添加新的搜索/替換關鍵字。我試圖在Visual Studio中使用C#應用程序設置(它創建一個XML配置文件),但我很難理解如何使這項工作。什麼是最好的方式來做到這一點,所以值不必硬編碼?

回答

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 

(請注意,我的代碼缺少一些檢查,但您應該明白,也可以使用StringB uilder)