Страница 1 из 1

Полное удаление дубликатов строк в текстовом файле

Добавлено: Ср дек 21, 2011 14:43
shveicar
Здравствуйте, возникла такая проблема, - существует текстовой файл с множеством ссылок (в том числе присутствуют запрещенные знаки ?,\& и тд.) многие ссылки повторяются и не один раз. Возможно-ли удалить все дубликаты ссылок, но не так как это делает textpipe или некоторые другие программы (удаление всех дубликатов кроме одного), а полностью - то-есть удалить вообще все совпадающие строки, что-бы в файле остались только строки которые ни разу не повторялись. Заранее благодарен за помощь, Спасибо.

Добавлено: Ср дек 21, 2011 23:18
Flasher
Хм. Задачу называть проблемой...

Код: Выделить всё

'=================================================================
' Оставить только уникальные строки  в выделенных текстовых файлах
' без концевых пробелов и пустых строк
' Параметр: %L
'=================================================================
If WScript.Arguments.Count = 0 Then WScript.Quit
L = vbNewLine
Set D = CreateObject("Scripting.Dictionary")
Set G = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
For Each F in Split(FSO.OpenTextFile(WScript.Arguments(0)).ReadAll, L)
  If F > vbNullString Then
    For Each Str in Split(FSO.OpenTextFile(F, 1, -2).ReadAll, L)
      Str = Trim(Str)
      If Str <> "" Then
        D.Add Str, ""
        If Err.Number = 457 Then : G.Add Str, "" : Err.Clear : End If
      End If
    Next
    For Each K in G.Keys : D.Remove(K) : Next
    For Each N in D.Keys : S = S & N & L : Next
    FSO.OpenTextFile(F, 2, -2).Write Trim(S)
    D.RemoveAll : G.RemoveAll
  End If
Next
Set FSO = Nothing : Set D = Nothing : Set G = Nothing : WScript.Quit

Добавлено: Чт дек 22, 2011 00:33
shveicar
Спасибо Flasher В который раз выручаешь.

Добавлено: Чт дек 22, 2011 00:50
Flasher
Пож-та. Кое-что подправил.

Добавлено: Пн дек 26, 2011 17:41
Моторокер
Если софт всё же подойдёт, попробуй мою программу АвтоФормат – меню Сервис | Удалить все дубли. Не знаю только, как на больших объёмах покажет.

Добавлено: Вс мар 18, 2012 14:44
shveicar
Моторокер
Спасибо, программа неплохая, сегодня нашёл еще один способ с помощью скрипта AutoHotkey

Код: Выделить всё

f11::
clipboard =
Send, ^{vk43}   ; Ctrl + C
ClipWait, 2
if ErrorLevel
{
   MsgBox, Буфер обмена пуст!
   Return
}
Loop, parse, clipboard, `n, `r
{
   FileRead, Text, %clipboard%
   Sort, Text, U
   FileAppend, %Text%, %clipboard%_Target.txt
   Send, ^{vk52}     ; Ctrl + R
}
F12:: ExitApp
Выделенный файл под курсором, - копировать, - F11, - и результат рядом...

Добавлено: Вс мар 18, 2012 15:10
Flasher
shveicar
Так нравятся резидентные скрипты с эмуляцией нажатий клавиш? :D
Ууу, да ещё и буфер обмена...
Судя по неожиданному зависанию на AutohotKey, надеюсь, уже начинает доходить, что компиляция не востребована? :wink:

Добавлено: Вс мар 18, 2012 18:36
shveicar
Flasher писал(а):cудя по неожиданному зависанию на AutohotKey
Незнаю, У меня на Xp пока, ничего не зависает, (возможно дело в глючности win7?) говорят - бывает проблема с русско-английским шрифтом (но это относиться к отдельным - конкретным случаям). А компиляция штука удобная (можно объединить несколько скриптов в один и сделать мини программу под свои нужды).

Добавлено: Вс мар 18, 2012 18:49
Flasher
shveicar
Зависание (в моём контексте) = необузданная тяга, а не вис процесса. :wink:
Компиляция - совершенно бестолковая вещь, жрущая лишнее пространство. Для объединения скриптов компиляция не нужна вовсе, да и объединять нужно далеко не всё.
В любом случае, очень странная позиция для задачи, которая была решена выше более оптимально на vbs с обработкой массива файлов, выбирать метод резидентности с подгрузкой трея...

Добавлено: Вс мар 18, 2012 19:05
shveicar
Flasher писал(а):В любом случае, очень странная позиция для задачи, которая была решена выше более оптимально на vbs
Не вопрос, ничего против vbs не имею., единственное что заставило поискать альтернативы (в данном случае) - сохранение результата в тот-же файл, иногда, такое не удобно.
P.s Я не изготавливаю "инструменты" - Я ими только пользуюсь.

Добавлено: Вс мар 18, 2012 19:08
Flasher
shveicar писал(а):иногда, такое не удобно
Как поставлена задача - так и решена. Надо было бы сохранять результат в другой файл - так бы и сделал. Это уже проблема вопрошающего, а не автора решения.

И странно, что интерес проснулся к обсуждению этого ahk-костыля, а не моего vbs-скрипта по MIME..