2016-05-25 2 views
-1

Итак, у меня есть 10 списков и один openfiledialog. Я использую кнопку «Добавить», чтобы открыть .txt-файл и отсортировать каждую строку в этом файле в разных списках в зависимости от содержащейся в нем строки.Список заказов на основе первых двух чисел в строке - .net

Вот три строки из текстового файла:

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 

ListBox 1 принимает .crc строк, Listbox 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) 

Любая помощь будет принята с благодарностью.

+0

Что означает 'item' строка выглядит? – DonBoitnott

+0

Я не вижу, где находится в вашей строке разделитель "- (" используется в методе Split – Steve

+0

@DonBoitnott. Три строки, которые я предоставил в качестве примеров, - это все элементы. – user3407086

ответ

0
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 

EDIT

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) 
+0

Спасибо за это. Как я могу реализовать это в своем проекте? К сожалению, я вроде как noob. – user3407086

+0

1. Я бы получил строки из файлов. 2. Я бы заполнил List (Of string) и отсортировал его. добавит список в список с помощью 'listbox.Items.AddRange (list.ToArray)' – shadow

+0

Да, я понимаю, что делает код, я просто не понимаю, как вставить этот модуль в свой проект. form1.vb code? – user3407086

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