1 (изменено: Veranda, 2019-02-08 19:46:27)

Тема: AHK: сравнение двух списков

Доброго времени суток уважаемые  форумчане!

Вместо сравнения только с одним словом "test" есть необходимость сделать сравнение с подключенным текстовым файлом, в котором будет список слов-исключений.

Т.е данные, построчно выводимые из "Data_base.txt" будут сравниваться с указанными в файле слов-исключений и при нахождении совпадений очередной строки из "Data_base.txt" с какой-либо строкой из файла слов-исключений - происходит их игнорирование.
Как это можно реализовать и в какую сторону копать?


Все что удалось сделать на текущий момент: в приведенном ниже коде идет построчное сравнение списка из файла "Data_base.txt" со словом "test"


Loop, read, Data_base.txt ; читаем файл
{
    Loop, parse, A_LoopReadLine, %A_Tab% ; выводим все по строкам
    {
 	IfInString, A_LoopReadLine, test ; ищем совпадения указанным данным (последний параметр)
	{
    Break ;если было найдено слово-исключение
    }
 else
 MsgBox %A_LoopField%
    }
}

f3:: reload

Текст в файле "Data_base.txt":

test
f
j
k
test

Рассчитываю на вашу помощь.

Чем дальше в лес - тем дальше в лес...

2

Re: AHK: сравнение двух списков

Сравниваться будет конкретная строка из целевого файла "Data_base.txt" с соответствующей по номеру строкой в проверочном файле, или со всеми строками в проверочном файле?

3

Re: AHK: сравнение двух списков

В Вашем примере, "Data_base.txt" парсится по признаку табуляции(A_Tab), а ниже, строки разделены признаками окончания строки и начала новой("`r`n"). Уточните этот момент.

4

Re: AHK: сравнение двух списков

KusochekDobra пишет:

Сравниваться будет конкретная строка из целевого файла "Data_base.txt" с соответствующей по номеру строкой в проверочном файле, или со всеми строками в проверочном файле?

Каждая очередная строка из файла "Data_base.txt" будет сравниваться построчно со всем  списком строк, содержащихся в файле слов-исключений.

KusochekDobra пишет:

В Вашем примере, "Data_base.txt" парсится по признаку табуляции(A_Tab), а ниже, строки разделены признаками окончания строки и начала новой("`r`n"). Уточните этот момент.

По по признаку табуляции(A_Tab)

ниже указал как пример содержимое файла. Поправил его, чтобы не наводить лишнюю смуту.

Чем дальше в лес - тем дальше в лес...

5

Re: AHK: сравнение двух списков

А в файле исключений, по какому признаку? Требуется ли полная идентичность, или достаточно нахождения проверяемой строки в части проверочной?

6

Re: AHK: сравнение двух списков

Прошу прощения:

Loop, read, Data_base.txt ; читаем файл
{
    Loop, parse, A_LoopReadLine, %A_Tab%

Здесь разбираются строки, а не файл, по признаку табуляции.

Проще говоря, есть проверочный файл(назовём его "Ordinar.txt"), слова которого так же разделены каким-то разделителем(каким?) и файл "Data_base.txt", у которого проверяются строки, слова которых разделены табуляцией и Вам нужно проверить каждое такое слово и проигнорировать его, если оно соответствует любому из слов в проверочном файле. Верно?

7 (изменено: Veranda, 2019-02-08 21:05:54)

Re: AHK: сравнение двух списков

KusochekDobra пишет:

Прошу прощения:

Loop, read, Data_base.txt ; читаем файл
{
    Loop, parse, A_LoopReadLine, %A_Tab%

Здесь разбираются строки, а не файл, по признаку табуляции.

Проще говоря, есть проверочный файл(назовём его "Ordinar.txt"), слова которого так же разделены каким-то разделителем(каким?) и файл "Data_base.txt", у которого проверяются строки, слова которых разделены табуляцией и Вам нужно проверить каждое такое слово и проигнорировать его, если оно соответствует любому из слов в проверочном файле. Верно?

И в файле "Data_base.txt" и в файле "Ordinar.txt" строки будут разделены табуляцией.
Мне нужно по очереди каждую строку файла "Data_base.txt" сравнить на предмет совпадения со строками, находящимися в файле "Ordinar.txt"

Чем дальше в лес - тем дальше в лес...

8

Re: AHK: сравнение двух списков

D := A_Tab

Data_base = Все	что	удалось	сделать	на	текущий	момент:	в	приведенном	ниже	коде	идет	построчное	сравнение	списка	из	файла
Ordinar = Такого там нет	удалось	сравнение	файла

Loop, Parse, Ordinar, %D%
	MsgBox % "Строка: """ A_LoopField """`n`n" (InStr(D Data_base D, D A_LoopField D) ? "Есть" : "Нет") " - в Data_base"
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

9

Re: AHK: сравнение двух списков

Так нагляднее.

D := A_Tab

Data_base = 
(Join`t
А такое там есть
Все
что
удалось
сделать на
текущий	момент:
в приведенном ниже
коде
идет
построчное
сравнение
списка
из
файла
)

Ordinar =
(Join`t
Такого там нет
А такое там есть
удалось
сравнение
файла
)

Loop, Parse, Ordinar, %D%
	MsgBox % "Строка: """ A_LoopField """`n`n" (InStr(D Data_base D, D A_LoopField D) ? "Есть" : "Нет") " - в Data_base"
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

10

Re: AHK: сравнение двух списков

http://forum.script-coding.com/viewtopi … 784#p98784

11

Re: AHK: сравнение двух списков

Благодарю за помощь! Именно то, что нужно!

serzh82saratov, в который раз по абстрактному описанию даете работающий пример кода, спасибо Вам! Дали пищу для ума для будущих разработок.
Malcev воспользовался вашим решением, как более понятным для меня в данный момент.

Чем дальше в лес - тем дальше в лес...