1 (изменено: avens, 2014-11-29 16:30:06)

Тема: AHK: Поиск неповторяющихся строк

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

Необходимо в двух текстовых файлах поискать и выбрать не повторяющиеся строки.

Пример:

file1 =
(
11111
22222
33333
77777
44444
55555
)

file2 =
(
11111
22222
88888
33333
44444
55555
)

То есть в данном случае результат поиска будет:

77777
88888

2

Re: AHK: Поиск неповторяющихся строк

Можно так:

file1 =
(
11111
22222
33333
77777
44444
55555
)

file2 =
(
11111
22222
88888
33333
44444
55555
)

Text := file1 . "`n" . file2
Sort, Text

Loop, parse, Text, `n, `r
{
   if (A_LoopField == PrevA_LoopField)
      IsPair := 1
   else
      IsPair ? (IsPair := "") : (Only .= PrevA_LoopField . "`n")
   
   PrevA_LoopField := A_LoopField
}
(!IsPair && Only .= PrevA_LoopField)

MsgBox, % Only := Trim(Only, "`n")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Поиск неповторяющихся строк

Или так:

file1 =
(
11111
22222
33333
77777
44444
55555
)

file2 =
(
11111
11111
22222
88888
33333
44444
55555
)

Text := "`n" file1 "`n" file2 "`n"
Loop, parse, Text, `n, `r
{
   StringReplace, Text, Text, `n%A_LoopField%`n, `n%A_LoopField%`n, UseErrorLevel
      if ErrorLevel = 1
         Only .= A_LoopField "`n"
}
MsgBox, % Only := Trim(Only, "`n")

4

Re: AHK: Поиск неповторяющихся строк

Как говорится, хорошая попытка, но нет.

file1 =
(
11111
999999999
)

file2 =
(
999999999
22222
)

Text := "`n" file1 "`n" file2 "`n"
Loop, parse, Text, `n, `r
{
   StringReplace, Text, Text, `n%A_LoopField%`n, `n%A_LoopField%`n, UseErrorLevel
      if ErrorLevel = 1
         Only .= A_LoopField "`n"
}
MsgBox, % Only := Trim(Only, "`n")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Malcev, 2014-11-27 06:55:08)

Re: AHK: Поиск неповторяющихся строк

А так?

file1 =
(
11111
999999999
)

file2 =
(
999999999
22222
)

Text := "`n" file1 "`n`n" file2 "`n"
Loop, parse, Text, `n, `r
{
   StringReplace, Text, Text, `n%A_LoopField%`n, `n%A_LoopField%`n, UseErrorLevel
      if (ErrorLevel = 1) and (A_LoopField != "")
         Only .= A_LoopField "`n"
}
MsgBox, % Only := Trim(Only, "`n")

6

Re: AHK: Поиск неповторяющихся строк

Так уже лучше, если только не допустить, что строки могут повторяться в одном файле (это точно неизвестно, соответствует ли задаче):

file1 =
(
11111
999999999
999999999
)

file2 =
(
22222
)

Text := "`n" file1 "`n`n" file2 "`n"
Loop, parse, Text, `n, `r
{
   StringReplace, Text, Text, `n%A_LoopField%`n, `n%A_LoopField%`n, UseErrorLevel
      if (ErrorLevel = 1) and (A_LoopField != "")
         Only .= A_LoopField "`n"
}
MsgBox, % Only
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Поиск неповторяющихся строк

Вот так, вроде выходит:

file1 =
(
11111
999999999
)

file2 =
(
999999999
22222
)

Text := file1 "`n" file2
Loop, parse, Text, `n, `r
{
   RegExReplace(Text, "m`a)^\Q" . A_LoopField . "\E$", A_LoopField, Count)
   (Count = 1 && Only .= A_LoopField . "`n")
}
MsgBox, % Only := Trim(Only, "`n")

Идея-то в общем правильная была.

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

8

Re: AHK: Поиск неповторяющихся строк

Или так:

file1 =
(
1
11111
11111
999999999
)

file2 =
(
999999999
22222
22222
2
)

Text := "`n" file1 "`n" file2 "`n"
StringReplace, Text, Text, `n, `n`n, all
Loop, parse, Text, `n, `r
{
   StringReplace, Text, Text, `n%A_LoopField%`n, `n%A_LoopField%`n, UseErrorLevel
      if (ErrorLevel = 1) and (A_LoopField != "")
         Only .= A_LoopField "`n"
}
MsgBox, % Only

9 (изменено: serzh82saratov, 2014-11-27 09:54:33)

Re: AHK: Поиск неповторяющихся строк

Или так:


file1 =
(
11111
22222
33333
77777
44444
55555
)

file2 =
(
11111
22222
88888
33333
44444
55555
)

Text := "`n" file1 "`n" file2 "`n" 
StringReplace, Text, Text, `n, `n`n, all
Loop, parse, Text, `n, `r 
    (A_LoopField != "" && !InStr(Text, "`n" A_LoopField "`n", 1, , 2) && (Only .= A_LoopField "`n")) 
MsgBox, % Only
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Поиск неповторяющихся строк

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

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

11

Re: AHK: Поиск неповторяющихся строк

Я не понимаю над чем тут биться.
1. Прочитать содержимое обоих файлов в переменные и объединить в 1 переменную. (2x fileread + concatenate)
2. Сортировать строки по алфавиту и удалить дублирующиеся (Sort, input, U D`n)
3. ...
4. Profit?
stringreplace'ы тут нужны только в случае предобработки содержимого файлов, к задаче из subject'а темы это относится никак.
Loop'ы тут не нужны вообще.

12

Re: AHK: Поиск неповторяющихся строк

Drugoy, да ладно?

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

13

Re: AHK: Поиск неповторяющихся строк

Drugoy пишет:

Я не понимаю над чем тут биться.
1. Прочитать содержимое обоих файлов в переменные и объединить в 1 переменную. (2x fileread + concatenate)
2. Сортировать строки по алфавиту и удалить дублирующиеся (Sort, input, U D`n)
3. ...
4. Profit?
stringreplace'ы тут нужны только в случае предобработки содержимого файлов, к задаче из subject'а темы это относится никак.
Loop'ы тут не нужны вообще.

Но разве можно применяя команду Sort выполнить задачу?

input =
(
1
2
3
4
5
1
2
3
4
)

Sort, input, U D`n

MsgBox %input%

Надо выбрать неповторяющиесь строки, результат из этого примера должен быть "5".

14

Re: AHK: Поиск неповторяющихся строк

Ааа, прошу прощения: не вник в суть сначала.
Да, фильтрации повторяющихся строк явно недостаточно и да, тогда нужна петля.

15

Re: AHK: Поиск неповторяющихся строк

Кстати по поводу stringreplace. Как то нехорошо ведёт себя InStr. По логике, ведь так должно работать:


file1 =
(
11111
33333
)

file2 =
(
11111
22222
22222
33333
)

Text := "`n" file1 "`n" file2 "`n" 
Loop, parse, Text, `n, `r 
    (A_LoopField != "" && !InStr(Text, "`n" A_LoopField "`n", , , 2) && (Only .= A_LoopField "`n")) 
MsgBox, % Only

Но нет.
Приходится вставлять

StringReplace, Text, Text, `n, `n`n, all

(9 пост).

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Поиск неповторяющихся строк

А по-моему правильно работает.
Если бы он в твоем примере находил 2 раза линию из двоек, то тогда логично было бы и в числе "222" найти 2 пары "22".

17

Re: AHK: Поиск неповторяющихся строк

"`n" A_LoopField "`n"

Не уверен, что Я тебя понял.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

18

Re: AHK: Поиск неповторяющихся строк

Он имеет в виду что

MsgBox, % InStr("222", "22",,, 2)

по аналогии.

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

19

Re: AHK: Поиск неповторяющихся строк

Теперь понял. Возможно это правильно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Поиск неповторяющихся строк

avens, "неповторяющихся" в названии темы пишется слитно.

21

Re: AHK: Поиск неповторяющихся строк

ypppu пишет:

avens, "неповторяющихся" в названии темы пишется слитно.

Исправил