|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сравнить два массива не построчно,а целиком? |
|
[решено] Как сравнить два массива не построчно,а целиком?
|
Новый участник Сообщения: 19 |
Пожалуйста подскажите в каком направлении двигаться, или помогите написать скрипт.
Всем ответившим спасибо за советы и помощь. Дано: 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> #include <Array.au3> Local $aCompare,$aSample[5] $aSample[1] = "[JK]" ; первая строка образца $aSample[2] = "1=Q" ; вторая строка образца $aSample[3] = "2=Q" ; третья строка образца $aSample[4] = "3=Q" ; четвертая строка образца $compare = "Compare.ini" ; присвоили переменную _FileReadToArray($compare, $aCompare) ; считали значения строк Compare.ini в массив For $i = 1 To UBound($aCompare) - 1 $error2 = _ArraySearch($aSample,$aCompare[$i]) If $error2 = -1 Then MsgBox(48, $compare & " строка " & $i, "Данные файла " & $aSample & " в строке № " & $i & " не совпадают", 2); несовпадение массива Exit (0) Else MsgBox(64, $compare & " строка " & $i, "Данные файла " & $aSample & " в строке № " & $i & " совпадают", 2);здесь совпадение массива EndIf Next |
|
Отправлено: 22:20, 01-11-2010 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Небольшой итог.Если где неправ,поправьте.
Коды Creat0R , пост № 4 и № 9 не подходят. № 4 -- неустраивает алгоритм отображения MsgBox ; № 9 -- неустраивает код для отображения MsgBox. Cреднее время выполнения скриптов, без MsgBox: 0.20 сек. Так же в обоих постах не работает часть кода,на быстрое завершение работы скрипта при несовпадении массивов,а очень бы хотелось.Поправьте.Пожалуйста. If $iComp_Ubound <> $iSamp_Ubound Or $iComp_Ubound <= 0 Then MsgBox(48, $sCompare_File, "Данные файла [" & $sSample_File & "] не совпадают", 2); несовпадение массива Exit EndIf Среднее время выполнения всех скриптов, без MsgBox: 0.23 сек. Те не на порядок медленнее работают.Или что Вы имели ввиду? № 5 -- при устранении ошибки в части кода,убрано[0] , скрипт начинает работать,но сравнение не делает. При любом изменении значений в Compare.ini выдается сообщение:"Все три строки совпали" If $aSample_SectText = $aCompare_SectText Then $sInfoText="Все три строки совпали" Else $sInfoText="Данные секций НЕ совпадают" EndIf Воспользовался как примером и сделал так: #include <File.au3> #include <Array.au3> Local $aCompare,$aSample $compare = "Compare.ini" $sample = "Sample.ini" _FileReadToArray($compare,$aCompare) _FileReadToArray($sample , $aSample) $sCompare_SectText = _ArrayToString( $aCompare,"|") $sSample_SectText =_ArrayToString($aSample, "|") If $sSample_SectText <> $sCompare_SectText Then MsgBox(64, "Info" ,"Данные *.ini файлов НЕ-совпадают",1) Exit (0) Else MsgBox(48, "Info" ,"Данные *.ini файлов совпадают",1) Exit (0) EndIf |
Отправлено: 17:58, 03-11-2010 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать pekich,
Вы сначала определитесь с задачей, я последним сообщением полностью сюит с толку. Цитата pekich:
Не проще ли так сделать: $compare = "Compare.ini" $sample = "Sample.ini" $sCompare_SectText = FileRead($compare) $sSample_SectText = FileRead($sample) If $sCompare_SectText <> $sSample_SectText Then MsgBox(64, "Info", "Данные *.ini файлов НЕ-совпадают", 1) Else MsgBox(48, "Info", "Данные *.ini файлов совпадают", 1) EndIf Exit |
|
------- Отправлено: 18:37, 03-11-2010 | #12 |
![]() Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Цитата pekich:
$aSample_SectText - это массив и для сравнения надо брать значение его первого элемента : ( $aSample_SectText[0] ) При убирании [0] ты пытаешься сравнить сами массивы ( а это есть "" ) . Поэтому и получашь всегда равенство ( "" = "" )"Все три строки совпали" Если вылезает сообщение об ошибке, значит указанная секция в файле не найдена (отсутствует). Следовало бы ввести проверку на существование секций с указанными именами , так : If Not IsArray($aSample_SectText) Then $sInfoText="Секция : " & $sSectNameSample_File & "не найдена" ElseIf Not IsArray($aCompare_SectText) Then $sInfoText="Секция : " & $sSectNameCompare_File & "не найдена" ElseIf $aSample_SectText[0] = $aCompare_SectText[0] Then $sInfoText="Все три строки совпали" Else $sInfoText="Данные секций НЕ совпадают" EndIf MsgBox(64, "Info" ,$sInfoText) |
|
Последний раз редактировалось gregaz, 04-11-2010 в 06:03. Отправлено: 21:54, 03-11-2010 | #13 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Хоть хелп и на русском ,но даже и с родгого языка приходится переводить.FileRead - ну не обратил внимание. А,например, UBound - Вернуть размер размерности массива.Когда прочитал, то подумал-бред! В последствии истолковал так : эта функция преобразует массив в некое единое значение.При том не уверен,что перевел для себя правильно. И с задачей я определился с первого поста:необходимо сравнить содержание двух *.ini файлов. А так как проглядел FileRead , то пришел к выводу , что нужно сравнивать массивы. Отсюда и заголовок темы. Зато поучился работать с массивами и это гуд. gregaz Цитата:
SciTE сообщает: If $aSample_SectText[0] = $aCompare_SectText[0] Then If $aSample_SectText^ ERROR Большое Всем спасибо за помощь.Живите и процветайте. Вопрос решен. |
||
Отправлено: 13:55, 04-11-2010 | #14 |
![]() Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать Цитата pekich:
![]() типа юмор ![]() а теперь серьезно, русская справка настолько устарела, что пользоваться ею, подчас, вредно для кодинга. лучше взять актуальную английскую, и если с языком совсем туго, то использовать разного рода переводчики. не айс, но хоть что-то |
|
------- Отправлено: 23:36, 04-11-2010 | #15 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Триггер пробуждения Диспетчера задач | nc-media | Microsoft Windows 7 | 3 | 26-09-2010 20:02 | |
Прочие БД - oracle]FRM-40735: POST-OUERY триггер вызвал необработанное ислючение ORA-01403 | Molchun78 | Программирование и базы данных | 0 | 08-11-2008 23:07 | |
Счетчик | Котяра | Вебмастеру | 3 | 03-05-2008 03:59 | |
[MySQL]auto_increment и триггер | Kerbit | Вебмастеру | 11 | 14-11-2006 21:43 | |
счетчик | makcum | Вебмастеру | 17 | 07-06-2002 14:24 |
|