Найти строки в тексте и, если соответствует, поместить в другой текст с другим именем - PullRequest
1 голос
/ 12 августа 2011

У меня есть RichTextBox, который содержит:

CAP-00128G  0402C
CAP-00128G  0402C
CAP-00129G  TANT3715
CAP-00129G  TANT3715
CAP-00129G  TANT3715
CAP-00129G  TANT3715
CAP-00130G  12BGA_1.5
CAP-00151G  ABC
IND-00007G  0402C
RES-00455G  0402R
RES-00455G  0402R
RES-00455G  0402R

Я хотел бы вставить значение 2-й столбец в первый набор кавычек в файле, который выглядит следующим образом (учитывая работает с тем же значением во втором наборе цитат, то есть CAP-22128G, CAP-00129G и т. д.) :

( 1 0 1 1 0 0 0 0 "" "CAP-00128G" "" 2 0 0 0 0 0 ) 
( 2 0 1 1 0 0 0 0 "" "CAP-00129G" "" 4 0 0 0 0 0 )
( 3 0 1 1 0 0 0 0 "" "CAP-00130G" "" 1 0 0 0 0 0 )
( 4 0 1 1 0 0 0 0 "" "CAP-00151G" "" 1 0 0 0 0 0 )
( 5 0 1 1 0 0 0 0 "" "IND-00007G" "" 1 0 0 0 0 0 )
( 6 0 1 1 0 0 0 0 "" "RES-00455G" "" 3 0 0 0 0 0 )

SO окончательный текст будет выглядеть следующим образом после сопоставления значений из строк в первом файле с соответствующими им соответствующими строками и проверки того, что 2-й набор кавычек соответствует 2-й столбец в первом файле. Кроме того, если RTB содержит значения «TANT3715» или «ABC», я хотел бы вставить пустую строку (до) и по-прежнему увеличивать счетчик. :

( 1 0 1 1 0 0 0 0 "0402C" "CAP-00128G" "" 2 0 0 0 0 0 )
( 2 0 1 1 0 0 0 0 "" "" "" 0 0 0 0 0 0 )
( 3 0 1 1 0 0 0 0 "TANT3715" "CAP-00129G" "" 4 0 0 0 0 0 )
( 4 0 1 1 0 0 0 0 "12BGA_1.5" "CAP-00130G" "" 1 0 0 0 0 0 )
( 5 0 1 1 0 0 0 0 "" "" "" 0 0 0 0 0 0 )
( 6 0 1 1 0 0 0 0 "ABC" "CAP-00151G" "" 1 0 0 0 0 0 )
( 7 0 1 1 0 0 0 0 "0402C" "IND-00007G" "" 1 0 0 0 0 0 )
( 8 0 1 1 0 0 0 0 "0402R" "RES-00455G" "" 3 0 0 0 0 0 )

Вот код, который распечатывает файл:

var part1 = lookup.Select(
    (x, i) => 
    string.Format(@"( {0} 0 1 1 0 0 0 0 """" ""{1}"" """" {2} 0 0 0 0 0 )",
    i + 1, x.Key, x.Count())); 

Итак, мой вопрос:

  • Может кто-нибудь помочь мне найти значение, соответствующее значению 1-го столбца в RichTextBox строке, содержащей это конкретное значение, а затем вставить значение 2-го столбца в RTB в кавычки перед матчем? Я знаю, что это может сбить с толку, поэтому дайте мне знать, если мне нужно уточнить, пожалуйста. :)

Спасибо.

1 Ответ

1 голос
/ 12 августа 2011

Вы можете преобразовать свой ввод в словарь:

var input = "CAP-00128G  0402C\r\nCAP-00128G  0402C\r\n...";

var dict = input.Split(new string[] { "\r\n" })
                .Select(row => row.Split(new string[] { "  " }))
                .ToDictionary(cols => cols[0], cols => cols[1]);

и затем получить значение для каждого ключа из словаря:

var part1 = lookup.Select(
    (x, i) => 
    string.Format(@"( {0} 0 1 1 0 0 0 0 ""{3}"" ""{1}"" """" {2} 0 0 0 0 0 )",
    i + 1, x.Key, x.Count(), dict[x.Key])); 

Is lookupрезультат группировки ввода?

var input = "CAP-00128G  0402C\r\nCAP-00128G  0402C\r\n...";

var lookup = input.Split(new string[] { "\r\n" })
                  .Select(row => row.Split(new string[] { "  " }))
                  .GroupBy(cols => cols[0], cols => cols[1]);

Тогда вы можете сделать это просто:

var part1 = lookup.Select(
    (x, i) => 
    string.Format(@"( {0} 0 1 1 0 0 0 0 ""{3}"" ""{1}"" """" {2} 0 0 0 0 0 )",
    i + 1, x.Key, x.Count(), x.First())); 
...