|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сравнить два массива не построчно,а целиком? |
|
|
[решено] Как сравнить два массива не построчно,а целиком?
|
Новый участник Сообщения: 19 |
Профиль | Отправить PM | Цитировать
Пожалуйста подскажите в каком направлении двигаться, или помогите написать скрипт.
Всем ответившим спасибо за советы и помощь. Дано: 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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Предупреждение за нарушение правил форума, пункт 2.7:
Цитата:
И ещё, код нужно заключать в теги code, а раскрашивать можно утилитой Au3ToPost. |
|
------- Отправлено: 23:45, 01-11-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Исправлю
|
Отправлено: 00:30, 02-11-2010 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата pekich:
$sCompare_File = "Compare.ini" $sSample_File = "Sample.ini" $aCompare_Sect = IniReadSection($sCompare_File, "HG") $aSample_Sect = IniReadSection($sSample_File, "HG") $iComp_Ubound = UBound($aCompare_Sect) - 1 $iSamp_Ubound = UBound($aSample_Sect) - 1 If $iComp_Ubound <> $iSamp_Ubound Or $iComp_Ubound <= 0 Then MsgBox(48, $sCompare_File, "Данные файла [" & $sSample_File & "] не совпадают", 2); несовпадение массива Exit EndIf For $i = 1 To $iComp_Ubound If $aCompare_Sect[$i][0] & $aCompare_Sect[$i][1] = $aSample_Sect[$i][0] & $aSample_Sect[$i][1] Then MsgBox(64, $sCompare_File & " строка " & $i+1, "Данные файла [" & $sSample_File & "] в строке №" & $i+1 & " совпадают", 2) Else MsgBox(48, $sCompare_File & " строка " & $i+1, "Данные файла [" & $sSample_File & "] в строке №" & $i+1 & " не совпадают", 2) Exit EndIf Next |
|
------- Отправлено: 01:39, 02-11-2010 | #4 |
Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Вот вариант без построчной обработки массива :
$sCompare_File = "Compare.ini" $sSample_File = "Sample.ini" $sSectNameSample_File="JK" $sSectNameCompare_File="HG" $sSample_FileText=FileRead($sSample_File) $sCompare_FileText=FileRead($sCompare_File) $aSample_SectText= StringRegExp($sSample_FileText,"(?s).*\[" & $sSectNameSample_File & "\]\r\n(.+?)\[.*",1) $aCompare_SectText= StringRegExp($sCompare_FileText,"(?s).*\[" & $sSectNameCompare_File & "\]\r\n(.+?)\[.*",1) If $aSample_SectText[0] = $aCompare_SectText[0] Then $sInfoText="Все три строки совпали" Else $sInfoText="Данные секций НЕ совпадают" EndIf MsgBox(64, "Info" ,$sInfoText) |
|
Последний раз редактировалось gregaz, 02-11-2010 в 11:35. Отправлено: 06:42, 02-11-2010 | #5 |
Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Возможен вариант с использованием ф-ии : _ArrayEx.au3 см. Multidimensional array to string and back
#include "_ArrayEx.au3" $sCompare_File = "Compare.ini" $sSample_File = "Sample.ini" $aCompare_Sect = IniReadSection($sCompare_File, "HG") $aSample_Sect = IniReadSection($sSample_File, "JK") $sSample_SectText=_ArrayToStringEx($aSample_Sect, "|") $sCompare_SectText=_ArrayToStringEx($aCompare_Sect, "|") If $sSample_SectText = $sCompare_SectText Then $sInfoText="Данные секций совпадают" Else $sInfoText="Данные секций НЕ совпадают" EndIf MsgBox(64, "Info" ,$sInfoText) |
Последний раз редактировалось gregaz, 02-11-2010 в 11:49. Отправлено: 07:16, 02-11-2010 | #6 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Спасибо за оперативность, мне тоже интересен вариант сравнения из двух файлов *.ini .
Видимо несовсем понятно объяснил ,что мне нужно,уточню. Мой код и Ваш работает так ,при успехе: 1. Сравнивается первая строка обоих *.ini >вывод сообщения о совпадении ; 2. Сравнивается вторая строка обоих *.ini >вывод сообщения о совпадении ; 3. Сравнивается третья строка обоих *.ini >вывод сообщения о совпадении ; 4. Сравнивается четвертая строка обоих *.ini>вывод сообщения о совпадении ; 5. Завершение работы скрипта. Мне нужно так ,при успехе: 1. Сравнивается первая строка обоих *.ini ; 2. Сравнивается вторая строка обоих *.ini ; 3. Сравнивается третья строка обоих *.ini ; 4. Сравнивается четвертая строка обоих *.ini ; 5. Вывод сообщения,что все четыре строки в *.ini файлах совпали ; 6. Завершение работы скрипта. |
Отправлено: 10:24, 02-11-2010 | #7 |
Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Цитата pekich:
Как тема называется ? разве не так : "Как сравнить два массива не построчно,а целиком?" И зачем тогда сравнивать построчно Если тексты всей секции равны , то наверное и каждая строка равна , или я что-то не понимаю |
|
Последний раз редактировалось gregaz, 02-11-2010 в 14:49. Отправлено: 12:02, 02-11-2010 | #8 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата gregaz:
Цитата pekich:
$sCompare_File = "Compare.ini" $sSample_File = "Sample.ini" $aCompare_Sect = IniReadSection($sCompare_File, "HG") $aSample_Sect = IniReadSection($sSample_File, "HG") $iComp_Ubound = UBound($aCompare_Sect) - 1 $iSamp_Ubound = UBound($aSample_Sect) - 1 $iUbound = $iComp_Ubound If $iSamp_Ubound > $iComp_Ubound Then $iUbound = $iSamp_Ubound If $iComp_Ubound <> $iSamp_Ubound Or $iComp_Ubound <= 0 Then MsgBox(48, $sCompare_File, "Данные файла [" & $sSample_File & "] не совпадают", 2); несовпадение массива Exit EndIf $sCompare = "совпадают" For $i = 1 To $iUbound If $aCompare_Sect[$i][0] & $aCompare_Sect[$i][1] <> $aSample_Sect[$i][0] & $aSample_Sect[$i][1] Then $sCompare = "НЕ " & $sCompare ExitLoop EndIf Next MsgBox(64, $sCompare_File, "Данные файла [" & $sSample_File & "] " & $sCompare, 2) Exit |
||
------- Отправлено: 13:23, 02-11-2010 | #9 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Сижу, пробую, разбираюсь. Завтра к вечеру отпишусь.
|
Отправлено: 20:17, 02-11-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Триггер пробуждения Диспетчера задач | 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 |
|