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

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

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

Сообщение shveicar »

Здравствуйте, возникла такая проблема, - существует текстовой файл с множеством ссылок (в том числе присутствуют запрещенные знаки ?,\& и тд.) многие ссылки повторяются и не один раз. Возможно-ли удалить все дубликаты ссылок, но не так как это делает textpipe или некоторые другие программы (удаление всех дубликатов кроме одного), а полностью - то-есть удалить вообще все совпадающие строки, что-бы в файле остались только строки которые ни разу не повторялись. Заранее благодарен за помощь, Спасибо.
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение 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
Последний раз редактировалось Flasher Чт дек 22, 2011 00:50, всего редактировалось 2 раза.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Спасибо Flasher В который раз выручаешь.
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Пож-та. Кое-что подправил.
Аватара пользователя
Моторокер
Сообщения: 1517
Зарегистрирован: Пт май 06, 2005 08:22
Откуда: г. Пермь (читается Перьмь)
Контактная информация:

Сообщение Моторокер »

Если софт всё же подойдёт, попробуй мою программу АвтоФормат – меню Сервис | Удалить все дубли. Не знаю только, как на больших объёмах покажет.
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение 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, - и результат рядом...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Так нравятся резидентные скрипты с эмуляцией нажатий клавиш? :D
Ууу, да ещё и буфер обмена...
Судя по неожиданному зависанию на AutohotKey, надеюсь, уже начинает доходить, что компиляция не востребована? :wink:
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):cудя по неожиданному зависанию на AutohotKey
Незнаю, У меня на Xp пока, ничего не зависает, (возможно дело в глючности win7?) говорят - бывает проблема с русско-английским шрифтом (но это относиться к отдельным - конкретным случаям). А компиляция штука удобная (можно объединить несколько скриптов в один и сделать мини программу под свои нужды).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Зависание (в моём контексте) = необузданная тяга, а не вис процесса. :wink:
Компиляция - совершенно бестолковая вещь, жрущая лишнее пространство. Для объединения скриптов компиляция не нужна вовсе, да и объединять нужно далеко не всё.
В любом случае, очень странная позиция для задачи, которая была решена выше более оптимально на vbs с обработкой массива файлов, выбирать метод резидентности с подгрузкой трея...
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):В любом случае, очень странная позиция для задачи, которая была решена выше более оптимально на vbs
Не вопрос, ничего против vbs не имею., единственное что заставило поискать альтернативы (в данном случае) - сохранение результата в тот-же файл, иногда, такое не удобно.
P.s Я не изготавливаю "инструменты" - Я ими только пользуюсь.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

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