2012-12-22 118 views
6

我从输出文件中取出字符串,将始终是OkErr。 之后,我将这个结果OkErr Enum属性,这是好的,一切正常,但我相信肯定有比我更好的方式。最优雅的方法来删除字符串元素

由于我在取得3个字符的情况下提取了Ok我需要从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”)。子字符串(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; 
    } 
相关问题