1 (изменено: Tsubasa, 2015-12-22 21:46:45)

Тема: AHK: Посимвольное сравнение файлов

Добрый день!
Мне нужно сравнить посимвольно два файла и записать результат в третий. Файлы одинакового размера и содержат только нули и единицы, а результат должен быть логическим И этих символов.
То есть:
Файл 1:000100101110001
Файл 2:010100010101111
резулт:000100000100001

Я читал справку по операторам, пробовал и так и эдак. Единственный вариант, который сейчас вижу - это вот такой алгоритм:
-Посимвольно перебираем первый файл в Loop.
-Сравниваем символы с "1", ваписывая в третий 0, если 0. Как только находим "1", вычисляем положение символа.
-Перебираем в Loop второй файл до этого места, считываем символ, проверяем, 0 или 1, и если 1, то пишем в третий файл "1", иначе "0".

Какой-то велосипед получился. Нет ли более красивого решения?

2

Re: AHK: Посимвольное сравнение файлов

В имени темы нет префикса "AHK: " Это ошибка. Напишешь тебе ответят.

3

Re: AHK: Посимвольное сравнение файлов

Ох, извините, забыл. Исправил.

4

Re: AHK: Посимвольное сравнение файлов

Держи:

file1 := FileOpen("file1.txt","r").Read()
file2 := FileOpen("file2.txt","r").Read()
var := format("{1:+0" StrLen(file1) "}", format("{:x}",format("0x{}",file1) & format("0x{}",file2)))

msgbox % var

5

Re: AHK: Посимвольное сравнение файлов

Сам скрипт выдаёт Error:  Call to nonexistent function. и я не понимаю, что тут вообще происходит, но попробую разобраться. Спасибо.

6

Re: AHK: Посимвольное сравнение файлов

Версия ahk старая. Обнови вот ссылка.

7

Re: AHK: Посимвольное сравнение файлов

Да, так работает (правда выдаёт нули, но с этим разберусь). А где-нибудь есть документация на такие функции (можно и на английском). Когда гуглил, не нашёл их.

8 (изменено: yalanne, 2015-12-22 22:32:44)

Re: AHK: Посимвольное сравнение файлов

То есть нули, весь ответ в нулях? вы два файла создали и заполонили их?
Запись экрана.
Format()
FileOpen()

9

Re: AHK: Посимвольное сравнение файлов

Да, два файла. В каждом по 11 строк, каждая символов по 90. И там точно есть пересечения.

10

Re: AHK: Посимвольное сравнение файлов

Мой косяк. Там лимит символов ahk не позволяет, сейчас по другому сделаю.

11

Re: AHK: Посимвольное сравнение файлов

file1 := RegExReplace(FileOpen("file1.txt","r").Read() ,"\s")
file2 := RegExReplace(FileOpen("file2.txt","r").Read() ,"\s")

var1 := StrSplit(file1)
var2 := StrSplit(file2)
var3 := []
loop % var1.MaxIndex()
 var3 .= (var1[A_Index] = var2[A_Index]) and (var1[A_Index] = 1)

msgbox % var3

12

Re: AHK: Посимвольное сравнение файлов

Чёт больно сложно как-то.

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

13

Re: AHK: Посимвольное сравнение файлов

Спасибо, работает.