2012-12-22 181 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; 
    } 
相關問題