Что нового

[Массивы] Как создать массив из именнованного списка

A

at

Гость
Здравствуйте! Прошу показать на моем примере, как будет выглядеть массив из именнованного списка.

Код:
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 335, 185, 192, 114)
$Input1 = GUICtrlCreateInput("", 96, 80, 145, 21)
$Combo1 = GUICtrlCreateCombo("не выбрано", 96, 32, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, 'Один|Два|Три|Четыре|Пять|Шесть|Семь|Восемь|Девять|Десять|Одиннадцать')
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Combo1
            Switch GUICtrlRead($Combo1)
				Case GUICtrlRead($Combo1) = 'Один'
					 GUICtrlSetData($Input1, '1')
				Case GUICtrlRead($Combo1) = 'Два'
					 GUICtrlSetData($Input1, '2')
				Case GUICtrlRead($Combo1) = 'Три'
				     GUICtrlSetData($Input1, '3')
				Case GUICtrlRead($Combo1) = 'Четыре'
				     GUICtrlSetData($Input1, '4')
				Case GUICtrlRead($Combo1) = 'Пять'
				     GUICtrlSetData($Input1, '5')
				Case GUICtrlRead($Combo1) = 'Шесть'
				     GUICtrlSetData($Input1, '6')
				Case GUICtrlRead($Combo1) = 'Семь'
				     GUICtrlSetData($Input1, '7')
				Case GUICtrlRead($Combo1) = 'Восемь'
				     GUICtrlSetData($Input1, '8')
				Case GUICtrlRead($Combo1) = 'Девять'
				     GUICtrlSetData($Input1, '9')
				Case GUICtrlRead($Combo1) = 'Десять'
				     GUICtrlSetData($Input1, '10')
				Case GUICtrlRead($Combo1) = 'Одиннадцать'
				     GUICtrlSetData($Input1, '11')
			EndSwitch
	EndSwitch
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
такой вариант
Код:
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <array.au3>
Dim $array_l[5] = [4, 'один', 'два', 'три', 'четыре']
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 335, 185, 192, 114)
$Input1 = GUICtrlCreateInput("", 96, 80, 145, 21)
$Combo1 = GUICtrlCreateCombo("не выбрано", 96, 32, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, 'один|два|три|четыре')
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Combo1
			$combo = GUICtrlRead($Combo1)
			$index = _ArraySearch($array_l, $combo)
			If Not @error Then
				GUICtrlSetData($Input1, $index)
			Else
				GUICtrlSetData($Input1, '')
			EndIf
	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
at,
Или так можно попробовать.
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

$oDic = ObjCreate('Scripting.Dictionary')
$oDic.CompareMode = 0

$sStr = ''
For $i = 100 To 200 Step 4
	$sTmp = _NumberNumToName($i, 1)
	$oDic.add($sTmp, $i)
	$sStr &= $sTmp & '|'
Next

GUICreate('Test', 200, 150)
$nCombo = GUICtrlCreateCombo('', 25, 20, 150, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, $sStr, $sTmp)
$sStr = ''
$sTmp = ''
$nInput = GUICtrlCreateInput('', 50, 60, 100, 20)
GUICtrlSetData($nInput, $oDic.item(GUICtrlRead($nCombo)))
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nCombo
			GUICtrlSetData($nInput, $oDic.item(GUICtrlRead($nCombo)))
	EndSwitch
WEnd

; AZJIO, преобразование и модернизация VBS-скрипта, найденного в Google
; http://forum.oszone.net/post-1900913.html#post1900913
; Преобразует число в запись прописью. Параметр $iNum - любое целое число от 1 до 9223372036854775806
Func _NumberNumToName($iNum, $iRusLng = 0)
	Local $aN, $aNum, $c, $i, $j, $n, $r, $sText

	$iNum = StringStripWS($iNum, 8) ; удаляем пробелы
	If $iNum = '0' Then
		If $iRusLng Then Return 'Ноль'
		Return 'Zero'
	EndIf
	$iNum = Int($iNum) ; берём целую часть числа
	If Not StringIsDigit($iNum) Or $iNum > 9223372036854775806 Or $iNum = 0 Then Return SetError(1, 0, '') ; если не цифры или огромное число, то вылет
	$iNum = StringRegExpReplace($iNum, '(\A\d{1,3}(?=(\d{3})+\z)|\d{3}(?=\d))', '\1 ') ; dwerf
	$aNum = StringSplit($iNum, ' ')
	If $iRusLng Then
		Dim $a[4][10] = _
				[ _
				[' десять', ' одиннадцать', ' двенадцать', ' тринадцать', ' четырнадцать', ' пятнадцать', ' шестнадцать', ' семнадцать', ' восемнадцать', ' девятнадцать'], _
				['', ' сто', ' двести', ' триста', ' четыреста', ' пятьсот', ' шестьсот', ' семьсот', ' восемьсот', ' девятьсот'], _
				['', '', ' двадцать', ' тридцать', ' сорок', ' пятьдесят', ' шестьдесят', ' семьдесят', ' восемьдесят', ' девяносто'], _
				['', '', '', ' три', ' четыре', ' пять', ' шесть', ' семь', ' восемь', ' девять'] _
				]

		Dim $aBitNum[7] = ['', ' тысяч', ' миллион', ' миллиард', ' триллион', ' квадриллион', ' квинтиллион']
	Else
		Dim $a[4][10] = _
				[ _
				[' ten', ' eleven', ' twelve', ' thirteen', ' fourteen', ' fifteen', ' sixteen', ' seventeen', ' eighteen', ' nineteen'], _
				['', 'hundred', ' two hundred', ' three hundred', ' four hundred', ' five hundred', ' six hundred', ' seven hundred', ' eight hundred', ' nine hundred'], _
				['', '', ' twenty', ' thirty', ' forty', ' fifty', ' sixty', ' seventy', ' eighty', ' ninety'], _
				['', '', '', ' three', ' four', ' five', ' six', ' seven', ' eight', ' nine'] _
				]

		Dim $aBitNum[7] = ['', ' thousand', ' million', ' billion', ' trillion', ' quadrillion', ' quintillion']
	EndIf
	$aNum[1] = StringFormat('%03s', $aNum[1]) ; дополняем нулями недостающие разряды
	$sText = ''
	For $i = 1 To $aNum[0]
		If $aNum[$i] = '000' Then ContinueLoop
		$aN = StringSplit($aNum[$i], '')
		$r = $aNum[0] - $i
		For $j = 1 To $aN[0]
			$n = Number($aN[$j])
			If Not $n Then ContinueLoop
			$c = $j
			Switch $j
				Case 3
					Switch $n ; для чисел 1 или 2
						Case 1
							If $iRusLng Then
								If $r = 1 Then ; разряд единиц (не десятков и сотен)
									$sText &= ' одна'
								Else
									$sText &= ' один'
								EndIf
							Else
								$sText &= ' one'
							EndIf
						Case 2
							If $iRusLng Then
								If $r = 1 Then
									$sText &= ' две'
								Else
									$sText &= ' два'
								EndIf
							Else
								$sText &= ' two'
							EndIf
					EndSwitch
				Case 2 ; для чисел от 10 до 19
					If $n = 1 Then
						$c = 0
						$n = Number($aN[3])
						$aN[3] = 0
					EndIf
			EndSwitch
			$sText &= $a[$c][$n] ; присоединения числа из массива
		Next
		$sText &= $aBitNum[$r]
		Switch $n ; окончания для раряда кратного 1000, при $j=3 в конце цикла
			Case 1
				If $r = 1 And $iRusLng Then ; одна тысяч<а>
					$sText &= 'а'
				EndIf
			Case 2, 3, 4
				If $r = 1 Then ; 2,3,4 тысяч<и>
					If $iRusLng Then
						$sText &= 'и'
					Else
						$sText &= 's'
					EndIf
				ElseIf $r > 1 Then ; 2,3,4 милион<а>
					If $iRusLng Then
						$sText &= 'а'
					Else
						$sText &= 's'
					EndIf
				EndIf
			Case Else
				If $r > 1 Then ; 5-9 милион<ов>
					If $iRusLng Then
						$sText &= 'ов'
					Else
						$sText &= 's'
					EndIf
				EndIf
		EndSwitch
	Next
	Return StringStripWS($sText, 3)
EndFunc   ;==>_NumberNumToName
 
Верх