2012-12-22 32 views
6

Tôi đang tìm nạp chuỗi từ tệp đầu ra sẽ luôn là Ok hoặc Err. Sau đó, tôi đang truyền kết quả này Ok hoặc Err đến thuộc tính Enum, điều đó là ổn, mọi thứ đều hoạt động, nhưng tôi chắc chắn rằng phải có cách tốt hơn tôi.cách thanh lịch nhất để xóa phần tử chuỗi

Vì tôi đang tìm nạp 3 ký tự trong trường hợp tìm nạp Ok tôi cần phải xóa phần tử thứ ba khỏi Ok; kết quả.

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"; 
} 

Cảm ơn

+0

Nếu bạn mong đợi vị trí chính xác 411 cho chuỗi, bạn có thể kiểm tra chỉ cho 'Ok':' File.ReadAllText (@ "C: \ Temp \ SomeReport.txt"). Chuỗi con (411, 2); '. Nếu thông báo là bất cứ điều gì khác nhưng 'Ok', thì có lẽ đó là một lỗi. Có ý nghĩa? –

+0

Tôi đang mong đợi kết quả Ok hoặc Err. Đó là cách tôi sử dụng chuỗi con (411, 3); – user1765862

Trả lời

3

Bạn chỉ có thể sử dụng String.Trim() để loại bỏ các ';' nếu nó ở đó.

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

Kết quả:

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

Bạn chỉ có thể làm điều này:

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

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

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

Nếu bạn không thích điều đó, bạn có thể sử dụng TryParse sau khi cắt tỉa các dấu chấm phẩy:

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

+1 để sử dụng 'Enum.TryParse' – Ria

0

nếu bạn có follo cánh enum

public enum State 
{ 
    Err, OK 
} 

sử dụng cắt tỉa, như sa_adam213 nói rằng bạn có thể chuyển nó sang enum của bạn theo cách này:

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 

và cũng bỏ nó vào 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; 
    } 
Các vấn đề liên quan