2012-10-11 5 views
0

내가 예를 들어, 몇 개의 파일이 특정 단어 후 시험을 대체 :파일을 읽고

FileBegin Finance Open 87547.25 Close 548484.54 EndDay 4 End 

또 다른 파일 예 :

FileBegin Finance Open 344.34 Close -3434.34 EndDay 5 End 

내가 파일의 텍스트를 읽을 필요 Open이라는 단어 다음의 숫자 값만 바꾸고 Open이라는 단어의 전후에 나머지 텍스트를 남겨 둡니다.

string fileToRead = "c:\\file.txt"; 
    public void EditValue(string oldValue, string newValue, Control Item) 
    { 
     if (Item is TextBox) 
     { 
      string text = File.ReadAllText(fileToRead); 
      text = text.Replace(oldValue, newValue); 
      File.WriteAllText(activeSaveFile, text); 
     } 
    } 

은 무엇 단어 open 후 바로 숫자 값을 대체 대해가는 가장 좋은 방법이 될 것이다 : 나는이 코드를 사용하고있다?

답변

5

사용하여 정규 표현식 : 당신이 그것을 매번 재 컴파일하지 않도록, 그래서

Regex rgx = new Regex(@"Open [^\s]+"); 
string result = rgx.Replace(text, newValue); 
File.WriteAllText(activeSaveFile, result); 

이 방법을 사용하여, 당신은 방법 밖에 정규식 객체를 저장할 수 있습니다. 필자의 경우 파일 I/O에 비해 성능에 큰 영향을 미치지 않을 것이라고 추측하고 있지만 다른 상황에서는 좋은 방법입니다.

0

행을 빈 공간 (예 : string.split(new char[] { ' ' }, StringSplitOptions.Empty))으로 분할 한 다음 _splittedRow[3]을 얻고 새 행을 바꾸고 병합하십시오.

0

내가 당신을 이해한다면, 라인 :

FileBegin Finance Open 344.34 Close -3434.34 EndDay 5 End 

전체 파일? 그리고 이전 값에 대해서는 "344.34"를 입력하고 새로운 값에 대해서는 "something"을 입력했습니다. 새로운 값만 입력하고 싶습니까? IFS의 많은입니다

string fileToRead = "c:\\file.txt"; 
public void EditValue(string oldValue, string newValue, Control Item) 
{ 
    if (Item is TextBox) 
    { 
     string text = File.ReadAllText(fileToRead); 
     string[] words = text.Split(new char[] {' '}); // assuming space-delimited 
     words[3] = "new value"; // replace the target value 
     text = ""; 
     foreach (string w in words) 
     { 
      text += w + " "; // build our new string 
     } 
     File.WriteAllText(activeSaveFile, text.Trim()); // and write it back out 
    } 
} 

을하지만, 나는 이것이 당신이 무슨 뜻인지 생각 :

당신은 말할 수 있습니다. 또한 문자열의 한 부분을 대체 할 수있는 여러 가지 방법이 있습니다.이 방법을 사용하면 편리한 단어 배열로 다른 작업을 수행 할 수있는 유연성을 얻을 수 있다고 생각했습니다.

관련 문제