基于字符串-.net中前两个数字的订单列表
所以我有10个列表框和一个openfiledialog。我使用“添加”按钮打开一个.txt文件,并根据文件中包含的字符串将该文件中的每一行排序到不同的列表框中 下面是.txt文件中的三行:基于字符串-.net中前两个数字的订单列表,.net,vb.net,winforms,listbox,.net,Vb.net,Winforms,Listbox,所以我有10个列表框和一个openfiledialog。我使用“添加”按钮打开一个.txt文件,并根据文件中包含的字符串将该文件中的每一行排序到不同的列表框中 下面是.txt文件中的三行: Decent Cracker.crc, 2.0, 75 MB: 25.61.221.29 Generic Hasher.hash, 1.9, 63 MB: 25.61.221.29 Basic Port Scan.scan, 1.0, 23 MB: 25.61.221.29 列表框1接受.crc字符串,列表
Decent Cracker.crc, 2.0, 75 MB: 25.61.221.29
Generic Hasher.hash, 1.9, 63 MB: 25.61.221.29
Basic Port Scan.scan, 1.0, 23 MB: 25.61.221.29
列表框1接受.crc字符串,列表框2接受.hash字符串,等等
我可以根据扩展名将文件过滤到适当的列表框中,但我现在想做的是根据降序版本号(扩展名后面但大小之前的数字:ex 1.0)对每个列表框进行排序
我尝试了以下代码,但显然失败了
'sort by first number
Dim items = (From item In ListBox1.Items
Let parts = item.ToString.Split(New String() {" - ("}, StringSplitOptions.None)
Order By CInt(parts(0))
Select item).ToArray
ListBox1.Items.Clear()
ListBox1.Items.AddRange(items)
任何帮助都将不胜感激
Module Module1
Public Class RowComparer
Implements IComparer(Of String)
Public Function Compare(x As String, y As String) As Integer Implements IComparer(Of String).Compare
Dim xCodeParts As String() = x.Split(","c)(1).Trim.Split("."c) ' something like 1.1
Dim yCodeParts As String() = y.Split(","c)(1).Trim.Split("."c) ' something like 1.20
Dim xCodeText As String = ""
Dim yCodeText As String = ""
For i As Integer = 0 To xCodeParts.Length - 1
xCodeParts(i) = xCodeParts(i).PadLeft(10, "0"c)
xCodeText &= String.Format("|{0}|", xCodeParts(i))
Next
' xCodeText is something like |0000000001||0000000001|
For i As Integer = 0 To yCodeParts.Length - 1
yCodeParts(i) = yCodeParts(i).PadLeft(10, "0"c)
yCodeText &= String.Format("|{0}|", yCodeParts(i))
Next
' yCodeText is something like |0000000001||0000000020|
Return -xCodeText.CompareTo(yCodeText) ' - for desc order
End Function
End Class
Sub Main()
Dim list As New List(Of String)({
"Decent Cracker.crc, 1.1, 75 MB: 25.61.221.29",
"Generic Hasher.hash, 1.20, 63 MB: 25.61.221.29",
"Basic Port Scan.scan, 1.10, 23 MB: 25.61.221.29",
"Basyyyyyyyyy.scan, 2.10, 23 MB: 25.61.221.29",
"BasixxxxScan.scan, 1.12, 23 MB: 25.61.221.29"})
list.Sort(New RowComparer)
list.ForEach(Sub(value) Console.WriteLine(value))
Console.ReadLine()
End Sub
'Result
'Basyyyyyyyyy.scan, 2.10, 23 MB: 25.61.221.29
'Generic Hasher.hash, 1.20, 63 MB: 25.61.221.29
'BasixxxxScan.scan, 1.12, 23 MB: 25.61.221.29
'Basic Port Scan.scan, 1.10, 23 MB: 25.61.221.29
'Decent Cracker.crc, 1.1, 75 MB: 25.61.221.29
End Module
编辑
Dim lines As String() = IO.File.ReadAllLines("C:\Trial\list.txt")
Dim list as new List(Of String)(lines)
list.Sort(New RowComparer)
ListBox1.Items.AddRange(list.ToArray)
项
字符串是什么样子的?我看不出您的字符串中的分隔符“-(”在哪里用于拆分method@DonBoitnott我作为示例提供的三行是每一项。@Steve Ah是的,我已经修复了,谢谢。我如何在我的项目中实现这一点?很抱歉,我在这方面有点不知所措。1.我将从文件中获取行。2.我将填充一个列表(字符串)并对其进行排序。3.我将通过listbox.Items.AddRange(list.ToArray)将列表添加到列表框中
是的,我知道代码在做什么,我只是不知道如何将此模块插入到我的项目中。它只是在我的form1.vb代码中吗?复制文件中的类行比较器,但在类Fomr1
下,因此在文件中有两个类。您还可以向项目中添加一个名为HelperMo的模块在这个模块中添加类。这个模块可以作为所有项目的公共事物的“存储库”。