1 (изменено: avens, 2014-11-04 16:32:07)

Тема: AHK: Поиск и удаление или замена одинаковых строк в тексте

Здравствуйте!

Как можно проще на AutoHotKey сделать скрипт который найдет в текстовом файле одинаковые строки и удалит их оставив только одну из одинаковых?

К примеру содержимое текстового файла:

http://site.ru/165
http://site.ru/507 ;Одинаковые1 (оставить только одну)
http://site.ru/700 ;Одинаковые2 (оставить только одну)
http://site.ru/159
http://site.ru/507 ;Одинаковые1
http://site.ru/472
http://site.ru/549
http://site.ru/700 ;Одинаковые2
http://site.ru/428
http://site.ru/507 ;Одинаковые1

2

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

Можно воспользоваться функцией "Sort", если последовательность срок неважна.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

3

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

Alectric пишет:

Можно воспользоваться функцией "Sort", если последовательность срок неважна.

Упс.. Надо уточнить, я чего то сразу и не подумал
Последовательность важна! Надо чтобы последовательность осталась такой же, а из совпавших строк надо что бы верхняя оставалась, а нижние удалялись.

4

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

list := {}
Loop, Read, in.txt, out.txt
   if !list.HasKey(A_LoopReadLine) {
      list.Insert(A_LoopReadLine,"")
      FileAppend, %A_LoopReadLine%`n
   }

5

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

Сначала нужно определить, `n там, или `r`n.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

Огромная благодарность!

Работает первый и второй вариант! Там используется: `n

7

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

Если регистр не важен, то так не прокатит:


txt =
(  
оДИНАКОВЫЕ1
Одинаковые2

Одинаковые3
Одинаковые1
Одинаковые3
Одинаковые2

Одинаковые2
ОдинакОвые1
)

list := {}
Loop, parse, txt, `n
   if !list.HasKey(A_LoopField) {
      list.Insert(A_LoopField,"")
      Res .= A_LoopField "`n"
   }
MsgBox % Res

если регистр нужен, то через HasKey не выйдет его проверить.

+ открыть спойлер

For k, v in list := StrSplit(txt, "`n") 
    Loop % list.maxindex()-k
        list[k+A_Index] ~= "i)" v ? list.remove(k+A_Index) : 0 
For k, v in list 
    Res .= v "`n"
MsgBox % Res
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

Было уже:
http://forum.script-coding.com/viewtopic.php?id=8877

9

Re: AHK: Поиск и удаление или замена одинаковых строк в тексте

Если регистр важен, вместо строки в ключ можно задать хеш от этой строки - заодно решит некоторые дополнительные проблемы, которые могут возникнуть. Небольшая потеря в скорости не критична, АНК и так не рекордсмен в этой области.