2012-07-21 7 views
1

프로그래밍 초보자이며 새 값으로 텍스트 파일의 특정 단어를 검색하고 바꿀 C# 프로젝트를 작업 중입니다. 작동하는 코드가 있지만 OLD 및 NEW 값은 지금 하드 코딩되어 있습니다. 사용자가 나중에 OLD를 NEW 매핑에 추가하거나 업데이트 할 수 있도록 외부 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); 
} 

이 코드는 텍스트 파일의 각 행을 취/검색을 할 NEW 매핑에 대한 모든 OLD에 대한 대체하려고하고 다음 라인으로 이동 텍스트 파일에. 내가 머리를 감싸려고하는 문제는 사용자가 새 검색/키워드를 추가 할 수 있도록 CSV (또는 더 쉬운 경우 XML?) 구성 파일을 기반으로 OLD에서 NEW 매핑으로이 목록을 동적으로 만들 수 있다는 것입니다.

(XML 구성 파일을 만드는) Visual Studio에서 C# 응용 프로그램 설정을 사용하려고했지만 그 작업을 수행하는 방법을 이해하는 데 어려움을 겪었습니다. 값을 하드 코딩 할 필요가 없도록이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

0

csv 파일은 정상적으로 작동합니다.

나는 .. 나는이 replaceObject

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

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

이제 우리는

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

} 

이제 우리는 목록을 이동 CSV에서 읽을 전화 할게 새로운 객체를 생성하고 대체합니다

string entireFile = //read all of it 

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

//write it at the end 

(내 코드에는 일부 수표가 누락되어 있지만 생각을해야합니다. 또한 StringB uilder)

관련 문제