【发布时间】:2011-07-26 16:10:06
【问题描述】:
我有一个 ListBox,其中包含如下数据:
C44 EXCLUDES 237.910 193.469 0 0603_5
C45 EXCLUDES 244.102 193.387 0 0603
R47 EXCLUDES 226.935 179.519 90 0402_1
C18 CAP-00129G 230.960 190.619 0 0402
C17 CAP-00129G 250.085 198.569 180 0402_3
Q7 IC-00268G 258.460 205.594 0 SOT236
C25 CAP-00130G 255.635 189.669 90 0402_3
C56 EXCLUDES 229.430 189.374 0 0402
R42 EXCLUDES 241.010 192.194 90 TANT3216
R21 CAP-00129G -123.370 -112.114 270 0402_3
R10 EXCLUDES 246.560 203.894 0 0402_9
... .......... ....... ....... ... ........
我想按字符串的结尾对 ListBox 进行排序...所以 6th 列中的值 (0603_5, 0603_5, 0402_2, 0402_4, 0402_3, TANT3216, 0402_9... .)。
虽然不是所有这些都显示在上面的文件示例中,但这里是它们应该出现的顺序(从上到下):
RES, 0402, 0201, 0603, 0805, 1206, 1306, 1608, 3216, 2551, 1913, 1313, 2513, 5125, 2525, 5619, 3813, 1508, 6431, 2512, 1505, 2208, 1005, 1010, 2010, 0505, 0705, 1020, 1812, 2225, 5764, 4532, 1210, 0816, 0363, SOT.
此外,如果有多个相似的结尾(参见上面和下面的 *0402_3*),则列表项将按 2nd 列排序。因此,即使以R21 开头的行出现在以C25 开头的行之后,并且它们都以*0402_3* 结尾,R21 将被放置在C25 之上,因为它在第 6 列之后检查了第 2 列(这是从小到大排序的)。
所以,新文件如下所示:
C18 CAP-00129G 230.960 190.619 0 0402
C56 EXCLUDES 229.430 189.374 0 0402
R47 EXCLUDES 226.935 179.519 90 0402_1
C17 CAP-00129G 250.085 198.569 180 0402_3
R21 CAP-00129G -123.370 -112.114 270 0402_3
C25 CAP-00130G 255.635 189.669 90 0402_3
R10 EXCLUDES 246.560 203.894 0 0402_9
C45 EXCLUDES 244.102 193.387 0 0603
C44 EXCLUDES 237.910 193.469 0 0603_5
R42 EXCLUDES 241.010 192.194 90 TANT3216
Q7 IC-00268G 258.460 205.594 0 SOT236
... .......... ....... ....... ... ........
请注意TANT3216 位于SOT236 之前,因为它在上述排序列表中的编号为3216 而不是TANT。
问题:
- 如何使用 6th 列(如果需要,使用 2nd 列)对第一个文件进行正确排序,使其看起来像第二个文件?
- 我可以使用正则表达式还是有更简单的方法?
- 我有 3 个列表框,这 1 个需要使用上面的规则(结尾)进行排序,第二个列表框使用单独的规则,第三个列表框对未进入第一个或第二个列表框的任何其他内容进行排序。所以第一个和第二个 ListBox 是相似的,那么对于第三个 ListBox,我怎么能按其结尾按字母顺序排序?
【问题讨论】:
-
您的 TANT3216 / SOT236 示例仍不清楚,3216 在 216 之后。
-
数据从哪里来?在将其放入列表框之前进行排序可能会更容易,您可能最终会编写自定义排序例程,因为数据不是传统的 a-z 类型顺序。
-
@Henk:如果你看一下结尾的顺序,没有 216,所以它是基于 SOT 的,它是顺序列表中的最后一项。但是,对于 3216,订单结尾列表中有一个匹配项,所以它抓住了,因为没有一个用于 TANT.. 这更清楚吗?
-
@Stuart:它来自一个文本文件并被放入一个 RichTextBox,然后移动到一个 ListBox 用于用户功能。我在想我可以在将它放入 ListBox 之前在 RichTextBox 中对其进行排序,但我仍然不知道该怎么做。
标签: c# regex sorting listbox alphabetical