1

Тема: AHK: Скрипт не работает должным образом.

Приветствую всех. Написал скрипт, который должен сопоставлять поочерёдно строку первого документа со всеми строками второго и, в случае несовпадения, должен высвечивать несовпадающую строку на экран, при этом копируя её в буфер обмена.
Вроде на экране код выглядит идеально, но проблема в том, что когда я создал два тестировочных файла по 5 строк в каждом, скрипт не нашёл несовпадающей строки.
Кто-нибудь подскажите, пожалуйста, почему скрипт упорно высвечивает мне "Проверка окончена". Спасибо за ответ.


InputBox, ПервыйФайл, Путь первого файла, , , 300, 100, , , , ,
InputBox, ВторойФайл, Путь второго файла, , , 300, 100, , , , , 


Loop, Read, %ВторойФайл%
 {
 EnvAdd, ЧислоСтрок, 1
 }
 
 
Loop, Read, %ПервыйФайл%
{
ЧислоНесовподающихСтрок := 0
СтрокаОсновного := A_LoopReadLine

Loop, Read, %ВторойФайл%
 {
 IfNotInString, A_LoopReadLine, %СтрокаОсновного%
  {
  EnvAdd, ЧислоНесовподающихСтрок, 1
  If %ЧислоСтрок% = %ЧислоНесовподающихСтрок%
   {
   Clipboard = %СтрокаОсновного%
   MsgBox, 64, Несовпадающая строка, %СтрокаОсновного%
   Break
   }
  Else
  Continue
  }
 }
 
}
MsgBox, 64, Отчёт , Проверка окончена!
Sleep, 3000
ExitApp
Return

2

Re: AHK: Скрипт не работает должным образом.

SuBrex пишет:
IfNotInString, A_LoopReadLine, %СтрокаОсновного%

Если в одной строке присутствует другая, это не значит, что строки совпадают, например «test» и «tes».
Далее, у вас MsgBox появляется, только если

SuBrex пишет:
If %ЧислоСтрок% = %ЧислоНесовподающихСтрок%

Во-первых, если ЧислоСтрок равно пяти, а ЧислоНесовподающихСтрок равно единице, сообщение не должно появиться. Во-вторых, даже если эти две переменные равны, сообщение всё равно не появится, неверный синтаксис:

ЧислоСтрок := 5
ЧислоНесовподающихСтрок := 5
If %ЧислоСтрок% = %ЧислоНесовподающихСтрок%
   MsgBox, переменные равны
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: SuBrex, 2020-10-29 14:07:17)

Re: AHK: Скрипт не работает должным образом.

teadrinker

Если в одной строке присутствует другая, это не значит, что строки совпадают, например «test» и «tes».

Теперь сделал так:


InputBox, ПервыйФайл, Путь первого файла, , , 300, 100, , , , ,
InputBox, ВторойФайл, Путь второго файла, , , 300, 100, , , , , 


Loop, Read, %ВторойФайл%
 {
 EnvAdd, ЧислоСтрок, 1
 }
 
 
Loop, Read, %ПервыйФайл%
{
ЧислоНесовподающихСтрок := 0
СтрокаОсновного := A_LoopReadLine

Loop, Read, %ВторойФайл%
 {
 If A_LoopReadLine = %СтрокаОсновного%
  {
  EnvAdd, ЧислоНесовподающихСтрок, 1
  If %ЧислоСтрок% = %ЧислоНесовподающихСтрок%
   {
   Clipboard = %СтрокаОсновного%
   MsgBox, 64, Несовпадающая строка, %СтрокаОсновного%
   Break
   }
  Else
  Continue
  }
 }
 
}
MsgBox, 64, Отчёт , Проверка окончена!
Sleep, 3000
ExitApp
Return

В теории, это должно решить проблему, которую Вы описали

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

4 (изменено: teadrinker, 2020-10-29 14:17:07)

Re: AHK: Скрипт не работает должным образом.

SuBrex пишет:
 If A_LoopReadLine = %СтрокаОсновного%
  {
  EnvAdd, ЧислоНесовподающихСтрок, 1

Не очень понял, зачем вы тут увеличиваете количество несовпадающих строк, если строки были равны?

SuBrex пишет:

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

Тоже не понял идею. Если полное количество строк равно 5, а количество несовпадающих 1, строка никогда не высветится.

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

5 (изменено: teadrinker, 2020-10-29 14:30:23)

Re: AHK: Скрипт не работает должным образом.

А, кажется понял, вы ищете каждую строку по всему файлу. Тогда поменяйте

If %ЧислоСтрок% = %ЧислоНесовподающихСтрок%

на

If (ЧислоСтрок = ЧислоНесовподающихСтрок)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: SuBrex, 2020-10-29 14:47:18)

Re: AHK: Скрипт не работает должным образом.

teadrinker
Устранил все названые Вами проблемы, всё заработало.


InputBox, ПервыйФайл, Путь первого файла, , , 300, 100, , , , ,
InputBox, ВторойФайл, Путь второго файла, , , 300, 100, , , , , 


Loop, Read, %ВторойФайл%
 {
 EnvAdd, ЧислоСтрок, 1
 }
 
 
Loop, Read, %ПервыйФайл%
{
ЧислоНесовподающихСтрок := 0
СтрокаОсновного := A_LoopReadLine

Loop, Read, %ВторойФайл%
 {
 If A_LoopReadLine = %СтрокаОсновного%
  {
  Break
  }
 Else
 EnvAdd, ЧислоНесовподающихСтрок, 1
 If (ЧислоСтрок = ЧислоНесовподающихСтрок)
  {
  Clipboard = %СтрокаОсновного%
  MsgBox, 64, Несовпадающая строка, %СтрокаОсновного%
  Break
  }
 Else
 Continue
 }
 
}
MsgBox, 64, Отчёт , Проверка окончена!
Sleep, 3000
ExitApp
Return

Большое Вам за это спасибо!
P.S. Только я не понял, что делают эти "чудо-скобки", не могли бы Вы дать мне ссылку на прочтение или объяснить?

If (ЧислоСтрок = ЧислоНесовподающихСтрок)

7

Re: AHK: Скрипт не работает должным образом.

SuBrex пишет:

не могли бы Вы дать мне ссылку на прочтение

If (Expression)

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