Сортировка текстового файла - PullRequest
1 голос
/ 28 июля 2011

У меня есть этот текстовый файл (почти 60 МБ)

560000100300100201100001000000000000[...]
560000100400100201100001000000000000[...]
560000100400200201100001000000000000[...]
560000100200100201100001000000000000[...]

Я пишу приложение в vb .net, которое выполняет некоторый процесс, не связанный с этим файлом.

Но вконец, он не отсортирован.

"Ключи": (они вместе)

01003, 01004, 01004, 01002

и

001, 001, 002, 001

Каждая строка начинается с 56000, затемПервый ключ, второй ключ и остальная часть строки.

Я пытался использовать SORT, это входит в Windows.Это делает довольно хорошую работу, но мне нужна собственная функция на случай, если SORT недоступен.

Сначала вывод должен записать 560001002001.

Есть идеи ?, спросите, что вам нужноВы знаете.

Спасибо.

Ответы [ 3 ]

1 голос
/ 28 июля 2011

Не используйте Windows "sort.exe". Вместо этого используйте VB.Net:

  1. Считать файл в список строк VB.Net, строка за раз
  2. Сортировать список
  3. Запишите обратно отсортированный файл

Вот пример программы из MSDN, которая уже выполняет большую часть работы за вас:

Imports System
Imports System.IO
Imports System.Collections

Module Module1

    Sub Main()
        Dim objReader As New StreamReader("c:\test.txt")
        Dim sLine As String = ""
        Dim arrText As New ArrayList()

        Do
            sLine = objReader.ReadLine()
            If Not sLine Is Nothing Then
                arrText.Add(sLine)
            End If
        Loop Until sLine Is Nothing
        objReader.Close()

        For Each sLine In arrText
            Console.WriteLine(sLine)
        Next
        Console.ReadLine()
    End Sub

End Module

Вот документация для ArrayList.Sort ():

http://msdn.microsoft.com/en-us/library/8k6e334t.aspx

Надеюсь, это поможет!

0 голосов
/ 29 июля 2011

Учитывая размер файла, вам, возможно, лучше перейти к «старой школе» и использовать что-то вроде DOS SORT для сортировки файла. Я должен был сделать это для хранилища данных, и код не работал так же, как сортировщик текстовых файлов.

В командном окне (может использовать консольное приложение, или ShellExecute для пакетного файла, или каким-либо другим способом в коде), следующая команда отсортирует файл по его содержимому:

SORT C:\MyFile.CSV /O C:\MyFile_Sorted.CSV

Таким образом, вы сортируете файл как можно быстрее, а затем считываете содержимое вашего отсортированного файла (MyFile_Sorted.CSV) в вашу программу. Это может быть два шага, но это намного проще и быстрее, чем чтение в память, сортировка, а затем работа с набором результатов. Вы можете прочитать каждую строку, зная, что она уже отсортирована, и избавить от необходимости помещать 60 МБ в память.

0 голосов
/ 29 июля 2011

хотел оставить комментарий, но браузер не дал мне.так что ответ на сортировку по n символам: смотрите sort (icomparer) в http://msdn.microsoft.com/en-us/library/0e743hdt.aspx, где вы пишете свою собственную функцию сравнения, так что все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...