2016-12-18 6 views
1

ОК, у меня есть блок входного текста, как это ... (либо в последовательном потоке, или RichTextBox)
Будьте нежны - только день 3 из C#C# Разбираем список значений в двух полях

Около 50 строк с разделителями Л.Ф.

LASTKNOWN:041A 
INVERT:041E 
INCOUNT:0422 
INZERO:042A 
OUTCOUNT:0434 
OUTZERO:043C 

и мои Сырая новичка попытка разобрать эти одну строку в то время ... чтобы найти ключевое слово (например, LASTKNOWN), и нажмите его (буквальным) в список , затем выкопайте конечное значение и вставьте его во второй синхронизированный список целых чисел. ГОЕСА в синхронном список Int16

(Конечно, я ожидаю, что это может быть более элегантными структурами в списке - это я не до этого пока)

index = rtbReceived.Find("LASTKNOWN"); 
if (index > 0) 
{ // assign the value from the string into the local variable lists 
    fieldName.Add("LASTKNOWN"); 
    fieldValue.Add(<theValue>); 
} 

Там должен быть лучшим способом сделать это итеративно ... с ключевыми словами/значениями переменной длины и т. д.

Помогите оценить.

+0

На мой взгляд, 'Dictionary' будет лучшим выбором для тебя. – Hamed

+0

Вы можете разделить ввод на «новую строку», чтобы получить линии, а затем разделить каждую строку на двоеточие, чтобы получить значения ключа. –

ответ

1

Как упоминалось в комментариях, вы можете использовать комбинацию расщеплений. Вы также можете использовать этот подход с регулярным выражением, чтобы положить keyvaluepairs в словарь.

string sInput = @"LASTKNOWN:041A 
INVERT:041E 
INCOUNT:0422 
INZERO:042A 
OUTCOUNT:0434 
OUTZERO:043C"; 
Regex r = new Regex(@"^(?<key>[^:]+):(?<val>.+)$", RegexOptions.Multiline); 
MatchCollection matches = r.Matches(sInput); 

Dictionary<String, String> lst = new Dictionary<string, string>(); 
foreach (Match m in matches) 
{ 
    lst.Add(m.Groups["key"].Value, m.Groups["val"].Value); 
} 

Единственное, что следует иметь в виду в словаре, это то, что у вас не может быть дубликатов ключей. Как только у вас есть это в словаре, это не похоже на массив, который индексируется по строкам. Вот несколько примеров того, как вы можете использовать его:

foreach (KeyValuePair<String, String> item in lst) 
{ 
    string sKey = item.Key; 
    string sValue = item.Value; 
} 

string sLastKnownValue = lst["LASTKNOWN"]; 

Если вы просто ищете тот, который вы могли бы обойти итерация так:

string sInput = @"LASTKNOWN:041A 
INVERT:041E 
INCOUNT:0422 
INZERO:042A 
OUTCOUNT:0434 
OUTZERO:043C"; 

Regex r = new Regex(@"^LASTKNOWN:(?<val>.+)$", RegexOptions.Multiline); 
Match m = r.Match(sInput); 
string sValue = String.Empty; 
if (m.Success) 
    sValue = m.Value; 
+0

Спасибо - Словарь работал с удовольствием. –

+0

Awesome. Спасибо за проверку. –

Смежные вопросы