Что нового

Сравнение текста в двух разных документах и последующее изменение и сохранение

24itservice

Новичок
Сообщения
6
Репутация
0
Доброго,сообственно возникла такая проблема. Есть несколько машин, есть web сервер, требуется реализовать такую схему, раз в интервал времени, скрипт обращается к заданной веб морде к примеру 10.2.1.1/2 где в папке находится .txt файл содержащий набор данных. Скрипт должен взять данные оттуда, открыть .txt файл у себя на машине лежащий к примеру на C:/ и в случае совпадения, данных, уйти в ожидание после чего происходит повтор действий. В случае же расхождения данных,нужно что бы данные были перезаписаны,а файл сохранен соответственно.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
На каком этапе возникли сложности ?
 
Автор
2

24itservice

Новичок
Сообщения
6
Репутация
0
ra4o сказал(а):
На каком этапе возникли сложности ?
В целом то сложность возникла как раз таки в начале, не знаю как реализовать систему сравнения и перезаписи в случае различия.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
24itservice
не знаю как реализовать систему сравнения
Но мы же тоже не знаем, что у вас там за "набор данных" ;)

Тупо сравнить два файла по содержимому можно так
Код:
If FileRead("1.txt") = FileRead("2.txt") Then MsgBox(0, "", "Одинаковы")
 
Автор
2

24itservice

Новичок
Сообщения
6
Репутация
0
InnI сказал(а):
24itservice
не знаю как реализовать систему сравнения
Но мы же тоже не знаем, что у вас там за "набор данных" ;)

Тупо сравнить два файла по содержимому можно так
Код:
If FileRead("1.txt") = FileRead("2.txt") Then MsgBox(0, "", "Одинаковы")
Виноват, набор данных в файле это текст, длинной 200-500 символов.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
24itservice
набор данных в файле это текст
Ну вот и сравнивайте по содержимому. Если различаются - заменяйте локальный файл.


Добавлено:
Сообщение автоматически объединено:

Появились вопросы.
1. Зачем нужна локальная копия? Почему нельзя просто прочитать данные с сервера?
2. Если необходима локальная копия, зачем сравнивать её содержимое с серверным? Почему нельзя просто тупо заменить и всегда иметь актуальную версию?
 
Автор
2

24itservice

Новичок
Сообщения
6
Репутация
0
InnI сказал(а):
Появились вопросы.
1. Зачем нужна локальная копия? Почему нельзя просто прочитать данные с сервера?
2. Если необходима локальная копия, зачем сравнивать её содержимое с серверным? Почему нельзя просто тупо заменить и всегда иметь актуальную версию?

1. Локальная копия является набором параметров для выполнения машиной. Нельзя постоянно читать данные с сервера ввиду закрытия локальных машин от доступа ко всему в определенном интервале времени.
2. Сравнение содержимого позволяет избежать процедуры перезапуска всей системы выполнявшейся на локальной машине в случае совпадения.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
24itservice

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
В сравнении файлов тоже могут быть варианты, например первая строка одного файла должна совпадать с первой второго итд, либо просто искать наличие этой строки (части строки и пр.) в любой позиции второго файла. Вообще-то очень было-бы неплохо пример файла одного и второго и описание того, что не совпало и где.
 
Автор
2

24itservice

Новичок
Сообщения
6
Репутация
0
Upd. Вопрос оказался не решён, на тестовом стенде с прямым обращением функции нормально отработали, в случае забирания файла с ftp , цикл почему то со 2 прохода прерывается и начинает выполнять всё дальше, ошибка где то в этом куске , не могу понять, подозреваю что кроется проблема где то в том что соеденение не проходит при повторном цикле следовательно условие не выполняется и идет дальше.

Код:
$i=0
Do
If InetRead("ftp://192.168.56.1/2/1.txt") = FileRead("E:\1.txt") Then  $i=1
If InetRead("ftp://192.168.56.1/2/1.txt") < FileRead("E:\1.txt") Then $i=0
If InetRead("ftp://192.168.56.1/2/2.txt") = FileRead("E:\2.txt") Then  $i=1
If InetRead("ftp://192.168.56.1/2/2.txt") < FileRead("E:\2.txt") Then $i=0
If InetRead("ftp://192.168.56.1/2/config.txt") = FileRead("E:\config.txt") Then  $i=1
If InetRead("ftp://192.168.56.1/2/config.txt") < FileRead("E:\config.txt") Then $i=0
Sleep(20000)

Until $i=1

Local $hDownload = InetGet("http://test.ru/test/1.txt", @ScriptDir & "\1.txt", 1, 1)
Local $hDownload = InetGet("http://test.ru/test/2.txt", @ScriptDir & "\2.txt", 1, 1)
Local $hDownload = InetGet("http://test.ru/test/config.txt", @ScriptDir & "\config.txt", 1, 1)
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
24itservice
А вы знаете, как AutoIt сравнивает строки? В каком случае одна строка будет меньше другой?
Код:
ConsoleWrite("ab" < "c") ; это True
Обзор языка - операторы

И ещё ознакомьтесь в справке с опциями InetRead. Особенно обратите внимание на опцию 8.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
24itservice, Вы бинарные данные пытаетесь сравнить со строкой !
 
Верх