![]() |
Как сравнить два массива не построчно,а целиком?
Пожалуйста подскажите в каком направлении двигаться, или помогите написать скрипт.
Всем ответившим спасибо за советы и помощь. Дано: a) файл Compare.ini , например: [HG] 1 = Q 2 = G 3 = N b) образец-шаблон Sample.ini для сравнения , например: [JK] 1 = Q 2 = Q 3 = Q Задача: 1. Сравнить содержание Compare.ini с заданным образцом Sample.ini : НазваниеРазделов/Ключи/Значения. 2. При совпадении значений строк Compare.ini и Sample.ini ,выводится сообщение: "Все три строки совпали" , т.е. сообщение должно выводится не каждый раз при совпадении,а один раз при совпадении строк три раза,в данном случае; 3. При первом несовпадении работа скрипта завершается. Начало написал,концовку додумать немогу: Код:
#include <File.au3> |
Предупреждение за нарушение правил форума, пункт 2.7:
Цитата:
И ещё, код нужно заключать в теги code, а раскрашивать можно утилитой Au3ToPost. |
Исправлю
|
Цитата:
Код:
$sCompare_File = "Compare.ini" |
Вот вариант без построчной обработки массива :
Код:
$sCompare_File = "Compare.ini" |
Возможен вариант с использованием ф-ии : _ArrayEx.au3 см. Multidimensional array to string and back
Код:
#include "_ArrayEx.au3" |
Спасибо за оперативность, мне тоже интересен вариант сравнения из двух файлов *.ini .
Видимо несовсем понятно объяснил ,что мне нужно,уточню. Мой код и Ваш работает так ,при успехе: 1. Сравнивается первая строка обоих *.ini >вывод сообщения о совпадении ; 2. Сравнивается вторая строка обоих *.ini >вывод сообщения о совпадении ; 3. Сравнивается третья строка обоих *.ini >вывод сообщения о совпадении ; 4. Сравнивается четвертая строка обоих *.ini>вывод сообщения о совпадении ; 5. Завершение работы скрипта. Мне нужно так ,при успехе: 1. Сравнивается первая строка обоих *.ini ; 2. Сравнивается вторая строка обоих *.ini ; 3. Сравнивается третья строка обоих *.ini ; 4. Сравнивается четвертая строка обоих *.ini ; 5. Вывод сообщения,что все четыре строки в *.ini файлах совпали ; 6. Завершение работы скрипта. |
Цитата:
Как тема называется ? разве не так : "Как сравнить два массива не построчно,а целиком?" И зачем тогда сравнивать построчно Если тексты всей секции равны , то наверное и каждая строка равна , или я что-то не понимаю |
Цитата:
Цитата:
Код:
$sCompare_File = "Compare.ini" |
Сижу, пробую, разбираюсь. Завтра к вечеру отпишусь.
|
Небольшой итог.Если где неправ,поправьте.
Коды Creat0R , пост № 4 и № 9 не подходят. № 4 -- неустраивает алгоритм отображения MsgBox ; № 9 -- неустраивает код для отображения MsgBox. Cреднее время выполнения скриптов, без MsgBox: 0.20 сек. Так же в обоих постах не работает часть кода,на быстрое завершение работы скрипта при несовпадении массивов,а очень бы хотелось.Поправьте.Пожалуйста. Код:
If $iComp_Ubound <> $iSamp_Ubound Or $iComp_Ubound <= 0 Then Среднее время выполнения всех скриптов, без MsgBox: 0.23 сек. Те не на порядок медленнее работают.Или что Вы имели ввиду? № 5 -- при устранении ошибки в части кода,убрано[0] , скрипт начинает работать,но сравнение не делает. При любом изменении значений в Compare.ini выдается сообщение:"Все три строки совпали" Код:
If $aSample_SectText = $aCompare_SectText Then Воспользовался как примером и сделал так: Код:
#include <File.au3> |
pekich,
Вы сначала определитесь с задачей, я последним сообщением полностью сюит с толку. Цитата:
Не проще ли так сделать: Код:
$compare = "Compare.ini" |
Цитата:
$aSample_SectText - это массив и для сравнения надо брать значение его первого элемента : ( $aSample_SectText[0] ) При убирании [0] ты пытаешься сравнить сами массивы ( а это есть "" ) . Поэтому и получашь всегда равенство ( "" = "" )"Все три строки совпали" Если вылезает сообщение об ошибке, значит указанная секция в файле не найдена (отсутствует). Следовало бы ввести проверку на существование секций с указанными именами , так : Код:
If Not IsArray($aSample_SectText) Then |
Вложений: 1
Creat0R
Цитата:
Хоть хелп и на русском ,но даже и с родгого языка приходится переводить.FileRead - ну не обратил внимание. А,например, UBound - Вернуть размер размерности массива.Когда прочитал, то подумал-бред! В последствии истолковал так : эта функция преобразует массив в некое единое значение.При том не уверен,что перевел для себя правильно. И с задачей я определился с первого поста:необходимо сравнить содержание двух *.ini файлов. А так как проглядел FileRead , то пришел к выводу , что нужно сравнивать массивы. Отсюда и заголовок темы. Зато поучился работать с массивами и это гуд. gregaz Цитата:
SciTE сообщает: If $aSample_SectText[0] = $aCompare_SectText[0] Then If $aSample_SectText^ ERROR Большое Всем спасибо за помощь.Живите и процветайте. Вопрос решен. |
Цитата:
типа юмор :biggrin: а теперь серьезно, русская справка настолько устарела, что пользоваться ею, подчас, вредно для кодинга. лучше взять актуальную английскую, и если с языком совсем туго, то использовать разного рода переводчики. не айс, но хоть что-то |
Время: 02:10. |
Время: 02:10.
© OSzone.net 2001-