2012-12-22 3 views
6

나는 항상 Ok 또는 Err 중 하나가 될 출력 파일에서 문자열을 가져옵니다. 그 다음엔이 결과가 Ok 또는 Err 인 Enum 속성에 캐스팅됩니다. 모든 것이 정상적으로 작동하지만 확실한 방법이 있어야합니다.문자열 요소를 제거하는 가장 우아한 방법

Ok을 가져 오는 경우 3 문자를 가져 오는 중이므로 Ok에서 세 번째 요소를 제거해야합니다. 결과.

string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3); 
if (message == "Ok;") // `;` character should be removed in case that Ok is fetched 
{ 
    message = "Ok"; 
} 

감사

+0

당신이 만약 문자열에 대한 정확한 위치 411을 기대한다면'Ok '에 대해서만 체크 할 수 있습니다 :'File.ReadAllText (@ "C : \ Temp \ SomeReport.txt".) Substring (411, 2);'. 메시지가'Ok' 이외의 것이라면 오류 일 것입니다. 말이된다? –

+0

Ok 또는 Err 결과가 예상됩니다. 그게 내가 Substring (411, 3)을 사용하는 방법이다. – user1765862

답변

3

그냥 제거 String.Trim()를 사용할 수있는 ';' 있다면 거기에.

string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3).TrimEnd(';') 

결과 :

"Err" = "Err" 
"Ok;" = "Ok" 
1

당신은이 작업을 수행 할 수 있습니다

switch (message) 
{ 
    case "Err": 
    SomeProperty = EnumName.Err; 
    break; 

    case "Ok;": 
    SomeProperty = EnumName.Ok; 
    break; 

    default: 
    throw new Exception("Unexpected file contents: " + message); 
} 

당신이 그런 식으로, 당신은 세미콜론 트리밍 후 TryParse를 사용하지 않을 경우 :

EnumName result; 
if (Enum.TryParse(message.TrimEnd(';'), out result)) 
    SomePropery = result; 
else 
    throw new Exception("Unexpected file contents: " + message); 
+0

+1은'Enum.TryParse'를 사용합니다. – Ria

0

날개 열거

public enum State 
{ 
    Err, OK 
} 

sa_adam213 당신이 당신의 열거에이 방법을 변환 할 수 있습니다 말했듯이, 트리밍 사용 :

string message = File.ReadAllText(@"C:\Temp\SomeReport.txt").Substring(411, 3).TrimEnd(';') 
State state = (State)Enum.Parse(typeof(State),message); 
MessageBox.Show(state.ToString()); //should show OK or Err 

을 또한 int로 캐스팅 :

int i = (int)state; 
MessageBox.Show(i.ToString()); //should show 1 or 0 
1
 Enum message = Enum.Err; 
    if (Regex.Match(File.ReadAllText(@"C:\Temp\SomeReport.txt"), "(ok.+?){3}", RegexOptions.Singleline).Success) 
    { 
     message = Enum.OK; 
    } 
관련 문제