Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

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

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed Dec 21, 2011 14:43    Post subject: Полное удаление дубликатов строк в текстовом файле Reply with quote

Здравствуйте, возникла такая проблема, - существует текстовой файл с множеством ссылок (в том числе присутствуют запрещенные знаки ?,\& и тд.) многие ссылки повторяются и не один раз. Возможно-ли удалить все дубликаты ссылок, но не так как это делает textpipe или некоторые другие программы (удаление всех дубликатов кроме одного), а полностью - то-есть удалить вообще все совпадающие строки, что-бы в файле остались только строки которые ни разу не повторялись. Заранее благодарен за помощь, Спасибо.
_________________
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Dec 21, 2011 23:18    Post subject: Reply with quote

Хм. Задачу называть проблемой...
Code:
'=================================================================
' Оставить только уникальные строки  в выделенных текстовых файлах
' без концевых пробелов и пустых строк
' Параметр: %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


Last edited by Flasher on Thu Dec 22, 2011 00:50; edited 2 times in total
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Thu Dec 22, 2011 00:33    Post subject: Reply with quote

Спасибо Flasher В который раз выручаешь.
_________________
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Dec 22, 2011 00:50    Post subject: Reply with quote

Пож-та. Кое-что подправил.
Back to top
View user's profile Send private message
Моторокер



Joined: 06 May 2005
Posts: 1517
Location: г. Пермь (читается Перьмь)

Post (Separately) Posted: Mon Dec 26, 2011 17:41    Post subject: Reply with quote

Если софт всё же подойдёт, попробуй мою программу АвтоФормат – меню Сервис | Удалить все дубли. Не знаю только, как на больших объёмах покажет.
_________________
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Mar 18, 2012 14:44    Post subject: Reply with quote

Моторокер
Спасибо, программа неплохая, сегодня нашёл еще один способ с помощью скрипта AutoHotkey
Code:

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, - и результат рядом...
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Mar 18, 2012 15:10    Post subject: Reply with quote

shveicar
Так нравятся резидентные скрипты с эмуляцией нажатий клавиш? Very Happy
Ууу, да ещё и буфер обмена...
Судя по неожиданному зависанию на AutohotKey, надеюсь, уже начинает доходить, что компиляция не востребована? Wink
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Mar 18, 2012 18:36    Post subject: Reply with quote

Flasher wrote:
cудя по неожиданному зависанию на AutohotKey

Незнаю, У меня на Xp пока, ничего не зависает, (возможно дело в глючности win7?) говорят - бывает проблема с русско-английским шрифтом (но это относиться к отдельным - конкретным случаям). А компиляция штука удобная (можно объединить несколько скриптов в один и сделать мини программу под свои нужды).
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Mar 18, 2012 18:49    Post subject: Reply with quote

shveicar
Зависание (в моём контексте) = необузданная тяга, а не вис процесса. Wink
Компиляция - совершенно бестолковая вещь, жрущая лишнее пространство. Для объединения скриптов компиляция не нужна вовсе, да и объединять нужно далеко не всё.
В любом случае, очень странная позиция для задачи, которая была решена выше более оптимально на vbs с обработкой массива файлов, выбирать метод резидентности с подгрузкой трея...
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Mar 18, 2012 19:05    Post subject: Reply with quote

Flasher wrote:
В любом случае, очень странная позиция для задачи, которая была решена выше более оптимально на vbs
Не вопрос, ничего против vbs не имею., единственное что заставило поискать альтернативы (в данном случае) - сохранение результата в тот-же файл, иногда, такое не удобно.
P.s Я не изготавливаю "инструменты" - Я ими только пользуюсь.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Mar 18, 2012 19:08    Post subject: Reply with quote

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

И странно, что интерес проснулся к обсуждению этого ahk-костыля, а не моего vbs-скрипта по MIME..
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group