1

我有一个 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

我想将第二列值插入到文件中的第一组引号中,如下所示(考虑到在第二组引号中遇到相同的值,即 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 )

因此,在将第一个文件中的字符串中的值与其适当的相应字符串匹配并确保第二组引号第一个文件中的第二列匹配之后,最终文本将如下所示。此外,如果 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())); 

所以我的问题是:

  • 有人可以帮我找到将RichTextBox 中的第 1 列值与包含该特定值的行匹配的值,然后将RTB 中的第 2 列值插入匹配前的引号中吗?我知道这可能会令人困惑,所以如果我需要澄清,请告诉我。:)

谢谢。

4

1 回答 1

1

您可以将输入转换为字典:

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])); 

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())); 
于 2011-08-11T23:57:11.733 回答