Автор Тема: Как вернутся к редактированию GUI если запись в ini показывает ошибку в GUI ?  (Прочитано 1594 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 268

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Все работает, joiner. Фантастика !
Вы использовали массивы в скрипте - а это то что я редко использую. Наверное из-за этого запутался. А мне очень нужно понять как всё работает чтобы масштабировать Ваш пример
Пожалуйста прокомментируйте строки
Например я не могу понять строки
Код: AutoIt [Выделить]
Local $aContent[2][4] = [['Месяц Зимы', GUICtrlRead($iCombo1), 'День Зимы', GUICtrlRead($Input1)], ['Месяц Лета', GUICtrlRead($iCombo2), 'День Лета', GUICtrlRead($Input2)]]
    For $i = 0 To 1
        If $aContent[$i][1] Then
            If Not $aContent[$i][3] Then $sEmpty &= $aContent[$i][2] & @CRLF
        Else
            $count += 1
        EndIf
    Next
    If $count = UBound($aContent) Then Return -1
    If $sEmpty Then Return $sEmpty
 


А еше в этой строке, разве необходимо: & @CRLF?
Код: AutoIt [Выделить]
If Not $aContent[$i][3] Then $sEmpty &= $aContent[$i][2] & @CRLF
 

Если бы один пример - было бы волшебно...для новичка

Русское сообщество AutoIt


Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2695
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
поместить в массив данные из полей ввода это как вариант. в конкретном случае можно обойтись и без него, но если элементов окна, которые нужно будет читать, гораздо больше или их количество меняется во время работы кода, то лучше использовать массив

в цикле опрашиваем - заполнены ли поля Месяц, если да, то сразу проверяем заполнено ли поле День. Если не заполнен День. то собираем строку для вывода в сообщение
Код: AutoIt [Выделить]
$sEmpty &= $aContent[$i][2] & @CRLF
...................................................
If $sEmpty Then Return $sEmpty

символ переноса нужен для того, чтобы данные в MsgBox были столбиком. Ну а там как душе угодно, можно и в одну строку все расположить

Код: AutoIt [Выделить]
 $count += 1

если не заполнены поля Месяц, то эта переменная суммирует количество полей
Код: AutoIt [Выделить]
If $count = UBound($aContent) Then Return -1

в итоге, если все поля Месяц не заполнены, то будет сообщение, что нет данных для записи
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 268

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
joiner
Огромное спасибо за подсказки!
Мне нужно было время чтобы немного улучшить своё представление о массивах, иначе трудно было разобраться.
Затем   - было нужно получить представление об массиве из GUI
(нажмите для показа/скрытия)
Дальше я почти все понял  ;) и переписал  GUI  - добавив 3-тий блок для проверки
(нажмите для показа/скрытия)
И все получилось  :ok:
Поражает компактность  Вашего кода и вместе с тем - функциональность ... Что собственно и подтолкнуло меня на его дальнейшее изучение

Если можно еще пару вопросов?
Почему у переменной $count 2 действия  т.е. += а не просто  = 
Код: AutoIt [Выделить]
$count += 1
 

И я не совсем представляю как цикл  взаимодействует с массивом.
Цикл проводит проверку всех элементов массива  - создавая как бы таблицу и опрашивая по-срочно её элементы ? Причем циклу нужен всего 1 проход? Пока не индекс строки не совпадает с конечным числом переменной счётчика?

А и еще  - чтобы продолжить работу скрипта - нужно выйти из цикла через  ExitLoop или просто добавить GUIDelete() ?
И нельзя ли что-то придумать  чтобы значения массива писать не в 1 строку а переносить на новую строку: чтобы удобно в просмотре было. Хотя с переносом строк вроде есть решение уже
Код: AutoIt [Выделить]
    Local $aContent[3][4] =[ _
    ['Месяц Зимы', GUICtrlRead($iCombo1), 'День Зимы', GUICtrlRead($Input1)], _
    ['Месяц Лета', GUICtrlRead($iCombo2), 'День Лета', GUICtrlRead($Input2)], _
    ['Месяц Весны', GUICtrlRead($iCombo3), 'День Весны', GUICtrlRead($Input3)] _
    ]

 

Спасибо



« Последнее редактирование: Май 25, 2018, 22:40:13 от dr.room »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2695
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
dr.room  [?]
Цитировать
Почему у переменной $count 2 действия  т.е. += а не просто  =
это обычное сложение
Код: AutoIt [Выделить]
;подробный вариант
$count = $count + 1
;в компактном варианте
$count += 1


Цитировать
Цикл проводит проверку всех элементов массива  - создавая как бы таблицу и опрашивая по-срочно её элементы ? Причем циклу нужен всего 1 проход? Пока не индекс строки не совпадает с конечным числом переменной счётчика?
да, построчно. Не один проход, два. В массиве две строки(индекса) - 0,1

Цитировать
А и еще  - чтобы продолжить работу скрипта - нужно выйти из цикла через  ExitLoop или просто добавить GUIDelete() ?
смотря в каких случаях. пример
(нажмите для показа/скрытия)

второй пример
(нажмите для показа/скрытия)
« Последнее редактирование: Май 26, 2018, 07:03:12 от joiner »

Русское сообщество AutoIt


Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 268

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
Не один проход, два. В массиве две строки(индекса) - 0,1
Но считывает эти строки цикл - за одно повторение ? Иначе если за 2, то я не понимаю, как тогда скрипт запоминает (и где хранит) полученные данные из массива? Ведь эти данные передаются в Msgbox.

Цитировать
$count = $count + 1
Чтобы быть уверенным что UBound сообщает что 2 = Указано неверное измерение массива. Понял.  Значит ли что если при опросе массива, данные не получены это и есть неверное измерение массива (т.е. 1 из таких случаев)?

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2695
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
за одно повторение считываются данные из одной строки массива(все колонки, если нужно). Данные уже в массиве. Далее по коду видно, что они берутся из массива и пишутся в файл.
в данном коде цикл нужен для проверки данных - заполнены поля или нет.
счетчик $count считает пустые строки месяца, если их количество равно количеству строк в массиве, значит нет данных для записи.
короче, все написание кода зависит от задач программы.


Добавлено: Май 29, 2018, 10:05:09
в теме мы обсуждаем код-пример, но в твоей настоящей программе, возможно, все нужно будет делать чуть по другому.

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 268

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Большое спасибо, joiner !!
Были не ясности  :stars: с построением цикла For и формирование переменной $sEmpty "на лету", так сказать  - теперь все :ok:

Вот пример как можно опросить массив на предмет типа данных из GUI
В примере: предполагается что дни месяца нужно представить числом а не иначе Иначе  - будет ошибкой.
(нажмите для показа/скрытия)

Еще раз  спасибо
ps
Если можно еще вопрос
Код: AutoIt [Выделить]
 $sEmpty &=
 

Это также сокращенная запись? Её можно полнее расписать?
« Последнее редактирование: Май 31, 2018, 00:32:27 от dr.room »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2695
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
dr.room  [?]
Цитировать
В примере: предполагается что дни месяца нужно представить числом

Код: AutoIt [Выделить]
$Input1 = GUICtrlCreateInput("", 96, 160, 207, 28, $ES_NUMBER)

и не нужно проверять - число это или нет

Цитировать
Это также сокращенная запись? Её можно полнее расписать?
то же самое как и в сложении(пример выше)



Добавлено: Май 31, 2018, 12:10:35
может так все сделать?
(нажмите для показа/скрытия)

« Последнее редактирование: Май 31, 2018, 12:10:36 от joiner, Причина: Объединение сообщений »

Русское сообщество AutoIt


Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 268

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
и не нужно проверять - число это или нет
Точно. - 1 проверка !
PS
Эх жалко элемент GUICtrlCreateCombo  - не поддерживает  :(

И все таки  - пока что не понятно выражение  :(
Код: AutoIt [Выделить]
$count += 1

В полной записи  то видимо должно  быть так
Код: AutoIt [Выделить]
$count = $count + 1
 

Но при этом исходно значение $count остается не определено. Может тогда $count = 0 , если оно не определено на старте ? Т.е. возможно нужно было бы так написать значение при объявлении переменой
Код: AutoIt [Выделить]
 Local $count = 0

и в цикле уже затем
Код: AutoIt [Выделить]
Else
            $count += 1
 


Тогда после третьего прохода цикла $count = 3

По поводу
Код: AutoIt [Выделить]
$sEmpty &=

подробный вариант видимо будет таким  - но все равно не понятно из-за не определенности переменной   :)
Код: AutoIt [Выделить]
$sEmpty = $sEmpty &

« Последнее редактирование: Май 31, 2018, 17:42:32 от dr.room »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2695
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
$count не обязательно в данном случае присваивать значение. оно и так 0
к тому же, эта переменная возвращается только если все ячейки месяцев пусты. больше она не нужна

Оффлайн dr.room [?]

  • Новичок
  • *
  • Сообщений: 268

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
$count не обязательно в данном случае присваивать значение. оно и так 0
Значит, если переменная не определена  - её значение  = 0. Я предполагал это. 
Цитировать
может так все сделать?
Это отличный вариант, спасибо

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
9 Ответов
3996 Просмотров
Последний ответ Март 02, 2012, 13:07:05
от vanekzver
16 Ответов
3279 Просмотров
Последний ответ Март 08, 2013, 17:40:02
от ivsatel
2 Ответов
2019 Просмотров
Последний ответ Ноябрь 23, 2013, 18:50:34
от axmen20010
10 Ответов
3931 Просмотров
Последний ответ Ноябрь 24, 2013, 18:58:08
от madmasles
2 Ответов
1759 Просмотров
Последний ответ Декабрь 28, 2013, 02:41:13
от Firestarter
10 Ответов
3343 Просмотров
Последний ответ Апрель 04, 2014, 15:23:14
от InnI
3 Ответов
835 Просмотров
Последний ответ Апрель 30, 2015, 15:16:51
от madmasles
1 Ответов
962 Просмотров
Последний ответ Июнь 03, 2015, 18:05:30
от urrya
5 Ответов
1087 Просмотров
Последний ответ Сентябрь 22, 2015, 12:21:57
от Yashied
3 Ответов
587 Просмотров
Последний ответ Декабрь 17, 2017, 18:15:25
от InnI