2011-01-17 43 views
5

Một trong các chức năng trong API mà tôi đang sử dụng đang trả về cơ bản chỉ là một khối văn bản lớn, phân tách mỗi khóa/giá trị bằng dấu chấm phẩy. Làm thế nào tôi sẽ phân tích văn bản như thế này trong C#?C# Phân tích khối văn bản

kết quả = thành công; income_today =; income_thismonth =; income_thisyear =; orders_pending = 19; orders_today_cancelled = 0; orders_today_pending = 0; orders_today_fraud = 0; orders_today_active = 0; orders_today_total = 0; orders_yesterday_cancelled = 0; orders_yesterday_pending = 3 ; orders_yesterday_fraud = 2; orders_yesterday_active = 0;

Trả lời

13

Vâng, đó trông giống như một trường hợp:

  • Gọi text.Split(';') để phân chia các khối vào cặp khóa-giá trị
  • Gọi pair.Split('=') trên mỗi cặp phải chia nó thành quan trọng và giá trị so

Lưu ý rằng string.Split có các tình trạng quá tải khác nhau mà bạn có thể muốn xem xét cho các tùy chọn xung quanh số chuỗi để trả về, cho dù để loại bỏ các giá trị rỗng, v.v.

+0

Cảm ơn bạn rất nhiều! –

+0

Hãy để tôi tặng bạn huy hiệu đồng 1896 của bạn;) – Arcturus

+0

haha ​​cảm ơn: P Ngoài ra, điều này có đúng không? http://www.ampaste.net/d5fb70b78 Khi tôi làm listBox1.Items.Add (stat); nó in ra chìa khóa/giá trị tốt, nhưng khi tôi làm listBox1.Items.Add (giá trị); nó thêm một tấn "String [] Array" vào hộp danh sách. –

0

Tôi sẽ sử dụng String.Split(Char[]). Thích ứng với ví dụ bạn cần string [] split = words.Split(new Char [] {';'});

+0

Lưu ý rằng bạn không cần phải explciitly viết "char mới [] {} "một phần như tham số là một mảng tham số (params). –

+0

Ah tôi thấy vậy nếu mảng chỉ là một chuỗi phần tử [] split = words.Split (';'); sẽ đủ? –

1

Tôi đã gặp sự cố tương tự gần đây. Đây là một đoạn mã có thể hữu ích cho bạn. Chiến lược cũng giống như trong Jon Skeet's anwers.

Dường như các phím là duy nhất trong khối lại văn bản, do đó bạn có thể sử dụng Dictionary

string[] pairs = block.Split(';'); 
Dictionary<string, string> values = new Dictionary<string, string>(); 

foreach (var element in pairs) 
{ 
    var tmp = element.Split('='); 
    var key = tmp[0]; 
    var val = tmp.Length == 2 ? tmp[1] : string.Empty; 
    values.Add(key,val); 
} 

foreach (var el in values) 
{ 
    Console.WriteLine(el); 
} 
+0

Điều đó có hiệu quả, cảm ơn bạn! –

1

Và đây là một trong những-liner (định dạng trên nhiều dòng cho rõ ràng).

Dictionary<string, string> dictionary = raw 
    .Split(new [] { ';', }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(x => x.Split('=')) 
    .ToDictionary(x => x[0], x => x[1]); 
Các vấn đề liên quan