INPUT

インプットボックスを表示します。第一引数に表示するメッセージ、第二引数にデフォルト値、第三引数にアスタリスク表示にするかのBoolean値を指定します。

[Cancel]もしくは右上の[☒]のときはEmptyが返ります。

構文
  1. return = INPUT( 表示メッセージ, [デフォルト値, パスワードフラグ, X, Y] )
引数
表示メッセージ
インプットボックスに表示するメッセージ
デフォルト値
デフォルトの値 として表示
パスワードフラグ
TRUE にすると文字は全てアスタリスク表示 (デフォルト FALSE)
X, Y
表示位置(デフォルトは中央、-1, -1にて前回位置)
戻り値

入力されたデータ(キャンセル時はEMPTY)

ファイルドロップによりファイル名の設定可(複数選択時はタブにて結合される)

  1. ANSI文字列(AnsiString)
  2. UNICODE文字列(UString)

プログラム実行例

入力された文字列の計算をする

HASHTBL variable
DIM array[-1]
DIM res = EMPTY

WHILE TRUE
	DIM %val% = ""
	FOR i = 0 TO LENGTH(variable) - 1
		%val% = %val% + variable[i, HASH_KEY] + "=" + variable[i, HASH_VAL] + " "
	NEXT
	DIM str = INPUT("計算式を入力してください。<#CR><#CR>変数<#TAB>" + %val% + "<#CR>結果<#TAB>" + res)
	IFB POS("=", str)  THEN
		DIM arr = SPLIT(str, "=")
		TRY
			variable[arr[0]] = EVAL(arr[1])
		EXCEPT
			FUKIDASI(TRY_ERRMSG)
			CONTINUE
		ENDTRY
	ENDIF
	FUKIDASI()
	res = EVAL(REPLACE(str, "=", ":="))
	IF res = EMPTY THEN BREAK
WEND
  1. LENGTH
  2. INPUT
  3. POS
  4. SPLIT
  5. EVAL
  6. FUKIDASI
  7. REPLACE
結果
INPUT:10>a=2
INPUT:10>b=3
INPUT:10>a*b
6

パスワードを生成

パスワードを10個生成します。

結果は実行する度に変わります。

REPEAT
	res = INPUT("何桁のパスワード?")
	IF res = EMPTY THEN EXIT
UNTIL CHKNUM(res)

FOR num = 0 TO 10
	DIM password = ""
	FOR n = 0 TO res
		SELECT RANDOM(3)
			CASE 0
				password = password + CHR(RANDOM(10) + 48)
			CASE 1
				password = password + CHR(RANDOM(26) + 65)
			CASE 2
				password = password + CHR(RANDOM(26) + 97)
		SELEND
	NEXT
	PRINT password
NEXT
  1. INPUT
  2. CHKNUM
  3. RANDOM
  4. CHR
結果
D659nv9Z6Q1t1MXjXfPUMMe35r012a639
XsQg7139wsUWF2q764f9AiopT451aULBC
A8a2t7Iq0Tl7Ij3W4p5RmQ97ElwvkWeG4
u8RTBF1aDt365Y436XC09Uo5X9kWHc4dS
AeCg2uNoUrCR9FsjYHtdhHg2bB6S92NhY
3eR4l89x7WGf1SZTlpDcIbBc25IbEgk4a
nuT94OR530poRBt9s0wF1b275qAfGDOHa
KTRa7wmEHjab2MopiT8u3aPwI6ntWmMt5
Bz626hGf9GS6yeZQyHrIAbEk1N0fs1ZL5
6Nze7rld3Rmd0tU0Y6kgP1AUwab0bjQlR
11C0x8862eOP1AVjVlXz7rEl4nKkR91Hf

二次方程式を解く

DIM frac[2]

DIM coeff = SPLIT(INPUT("係数を入力してください。「ax^2+bx+c=0」の「a,b,c」を入力。"), ",")

DIM a = coeff[0]
DIM b = coeff[1]
DIM c = coeff[2]

// 判別式
DIM D = EVAL("POWER(b, 2) - 4 * a * c")

DIM ans[-1]
DIM digit = -3

SELECT TRUE
	CASE D > 0
		IFB b = 0 THEN
			DIM root = simplifySqrt(D)
			frac[0] = root[0]
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = frac[0] + "/" + frac[1]
			ENDIF
			arrayPush(ans, (IIF(frac[0] / num <> 1, frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
			arrayPush(ans, (IIF(frac[0] / num <> 1, -frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
		ELSE
			// 約分する
			frac[0] = EVAL("-b")
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = frac[0] + "/" + frac[1]
			ENDIF
			// ルートの中から整数を外に出す
			root = simplifySqrt(D)
			frac[0] = root[0]
			num = GCD(frac)
			IFB frac[1] = num THEN
				arrayPush(ans, res + "+" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")"))
				arrayPush(ans, res + "-" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")"))
			ELSE
				arrayPush(ans, res + "+(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + "))/" + (frac[1] / num)))
				arrayPush(ans, res + "-(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + "))/" + (frac[1] / num)))
			ENDIF
		ENDIF
	CASE D = 0
		arrayPush(ans, ROUND(EVAL("-b/(2*a)"), digit))
	CASE D < 0
		IFB b = 0 THEN
			root = simplifySqrt(D)
			frac[0] = root[0]
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = frac[0] + "/" + frac[1]
			ENDIF
			arrayPush(ans, (IIF(frac[0] / num <> 1, frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
			arrayPush(ans, (IIF(frac[0] / num <> 1, -frac[0] / num, "") + IIF(root[1] <> 1, "√(" + root[1] + ")", "")))
		ELSE
			frac[0] = EVAL("-b")
			frac[1] = EVAL("2 * a")
			num = GCD(frac)
			IFB frac[1] = ABS(num) THEN
				res = frac[0] / ABS(num)
			ELSE
				res = IIF(frac[0] * frac[1] < 0, "-", "") + ABS(frac[0] / num) + "/" + ABS(frac[1] / num)
			ENDIF
			// ルートの中から整数を外に出す
			root = simplifySqrt(ABS(D))
			frac[0] = root[0]
			num = GCD(frac)
			IFB frac[1] = num THEN
				arrayPush(ans, res + "+" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i"))
				arrayPush(ans, res + "-" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i"))
			ELSE
				arrayPush(ans, res + "+(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i)/" + (frac[1] / num)))
				arrayPush(ans, res + "-(" + (IIF(frac[0] / num <> 1, frac[0] / num, "") + "√(" + root[1] + ")i)/" + (frac[1] / num)))
			ENDIF
		ENDIF
SELEND

PRINT REPLACE(IIF(a <> 1, a, "") +"x^2+" + b + "x+" + c, "+-", "-")
PRINT "-----"

FOR item IN ans
	PRINT item
NEXT

//////////////////////////////////////////////////
// 【引数】
//   num : ルートの中
// 【戻値】
//   整数を外に出す
//////////////////////////////////////////////////
FUNCTION simplifySqrt(num)
	HASHTBL root
	
	DIM arr = primeFactorization(num)
	DIM a = 1, b = 1
	
	FOR item IN arr
		root[item] = root[item] + 1
	NEXT
	
	FOR n = 0 TO LENGTH(root) - 1
		IF INT(root[n, HASH_VAL] /  2) <> 0 THEN a = a * POWER(root[n, HASH_KEY], INT(root[n, HASH_VAL] /  2))
		IF (root[n, HASH_KEY] * (root[n, HASH_VAL] MOD 2)) <> 0 THEN b = b * (root[n, HASH_KEY] * (root[n, HASH_VAL] MOD 2))
	NEXT
	
	DIM res[1] = a, b
	
	RESULT = SLICE(res)
FEND
  1. SPLIT
  2. INPUT
  3. EVAL
  4. GCD
  5. ABS
  6. arrayPush
  7. IIF
  8. ROUND
  9. REPLACE
結果
4x^2+5x+3
-----
-5/8+(√(23)i)/8
-5/8-(√(23)i)/8

数値から月の異名を求める

DIM month[12] = "睦月", "如月", "弥生",  "卯月",  "皐月", "水無月", "文月",  "葉月",  "長月",  "神無月", "霜月", "師走"

DIM str = INPUT("1〜12の数値を入力してください。")

IFB reTest(str, "[1-9]|1[0-2]") THEN
	PRINT month[str- 1]
ELSE
	PRINT "1〜12の数値を入力してください。"
ENDIF
  1. INPUT
  2. reTest
結果
INPUT:3>7
文月
解説
  1. 1行目
    DIM month[12] = "睦月", "如月", "弥生",  "卯月",  "皐月", "水無月", "文月",  "葉月",  "長月",  "神無月", "霜月", "師走"
    月の異名を配列に格納
  2. 3行目
    DIM str = INPUT("1〜12の数値を入力してください。")
    インプットボックスを表示する。
  3. 5-9行目
    IFB reTest(str, "[1-9]|1[0-2]") THEN
    	PRINT month[str- 1]
    ELSE
    	PRINT "1〜12の数値を入力してください。"
    ENDIF
    条件
    正規表現を使い入力された値が1〜12の整数かどうか。
    [1-9]|1[0-2]
    1~9の整数
    [1-9]|1[0-2]
    10~12の整数
    [1-9]|1[0-2]
    「1〜9の整数」または「10~12の整数」→「1〜12の整数」
    TRUE(1~12の整数ならば)
    month[0]に1月、month[1]に2月の異名が格納されているので、「入力された数値-1」番目に格納されている文字列を出力。この例の場合入力値が「7」なので、「month[6]」の「文月」を出力します。
    FALSE(それ以外ならば)
    「1〜12の数値を入力してください。」を出力。

カラーコードから抵抗値を計算

HASHTBL color

color["黒"] = 0;	color["茶"] = 1;	color["赤"] = 2
color["橙"] = 3;	color["黄"] = 4;	color["緑"] = 5
color["青"] = 6;	color["紫"] = 7;	color["灰"] = 8
color["白"] = 9;	color["金"] = "";	color["銀"] = ""

HASHTBL tolerance

tolerance["黒"] = "";		tolerance["茶"] = 1;		tolerance["赤"] = 2
tolerance["橙"] = 0.05;		tolerance["黄"] = "";		tolerance["緑"] = 0.5
tolerance["青"] = 0.25;		tolerance["紫"] = 0.1;		tolerance["灰"] = ""
tolerance["白"] = "";		tolerance["金"] = 5;		tolerance["銀"] = 10

DIM str = INPUT("カラーコードを入力してください。")

DIM num = LENGTH(str)

FOR i = 1 TO num - 2
	DIM res = res * 10 + color[COPY(str, i, 1)]
NEXT

res = res * POWER(10, color[COPY(str, num - 1, 1)])

PRINT res + "Ω±" + tolerance[COPY(str, num, 1)] + "%以内"
  1. INPUT
  2. LENGTH
  3. COPY
  4. POWER
結果
INPUT:15 > 黄紫橙金
47000Ω±5%以内

デスクトップにフォルダを作成

CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

WITH FSO
	.CreateFolder(.BuildPath(Folder.Self.Path, INPUT("デスクトップにフォルダを作成します。<#CR>フォルダ名を入力してください。")))
ENDWITH
  1. CREATEOLEOBJ
  2. FSO.BuildPath

パス文字列を生成します

CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

PRINT FSO.BuildPath(Folder.Self.Path, INPUT("フォルダ名もしくはファイル名を入力してください。"))
  1. createoleobj
  2. input
  3. fso.buildpath

指定したフォルダが存在するか

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM FolderName = INPUT("フォルダ名を入力してください。")

IFB FSO.FolderExists(FolderName) THEN
	MSGBOX("「" + FolderName + "」フォルダは存在します。")
ELSE
	MSGBOX("「" + FolderName + "」フォルダは存在しません。")
ENDIF
  1. createoleobj
  2. input
  3. fso.folderexists
  4. msgbox

指定したファイルが存在するか

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = INPUT("ファイルパスを入力してください。")

IFB FSO.FileExists(path) = TRUE THEN
	MSGBOX("「" + path + "」は存在します。")
ELSE
	MSGBOX("「" + path + "」は存在しませn。")
ENDIF
  1. CREATEOLEOBJ
  2. INPUT
  3. MSGBOX
  4. fso.FileExists

Googleでの検索結果を取得

DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://google.com")
BusyWait(IE)

IESETDATA(IE, INPUT("検索ワードを入力"), "q")
IESETDATA(IE, TRUE, "btnK")
BusyWait(IE)

DIM elements = IE.document.getElementsByClassName("rc")

FOR element IN elements
	PRINT element.getElementsByClassName("LC20lb").Item(0).textContent
	PRINT element.getElementsByClassName("s").Item(0).textContent
	PRINT "----------"
NEXT

IE.Quit
  1. CREATEOLEOBJ
  2. IE.Visible
  3. IE.Navigate
  4. IESETDATA
  5. INPUT
  6. IE.Document
  7. document.getElementsByClassName

入力した文字列をUTF8でURLエンコードする

PRINT ENCODE(ENCODE(INPUT("エンコードする文字列を入力してください。"), CODE_UTF8), CODE_URL)
  1. ENCODE
  2. INPUT

アラビア数字をローマ数字に変換

HASHTBL Roman

Roman[1] = "I"
Roman[2] = "II"
Roman[3] = "III"
Roman[4] = "IV"
Roman[5] = "V"
Roman[6] = "VI"
Roman[7] = "VII"
Roman[8] = "VIII"
Roman[9] = "IX"
Roman[10] = "X"
Roman[40] = "XL"
Roman[50] = "L"
Roman[90] = "XC"
Roman[100] = "C"
Roman[400] = "CD"
Roman[500] = "D"
Roman[900] = "CM"
Roman[1000] = "M"

DIM arr[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000

DIM num = INPUT("アラビア数字を入力して下さい。")

// 0以下4000以上の数字は無理
IF num <= 0 OR num >= 4000 THEN EXIT

DIM res = ""

n = UBound(arr)
REPEAT
	SELECT TRUE
		CASE num / Roman[n, HASH_KEY] >= 1
			res = res + Roman[n, HASH_VAL]
			num = num - Roman[n, HASH_KEY]
		DEFAULT
			n = n - 1
	SELEND
UNTIL num = 0

PRINT res
  1. INPUT

MSGBOXの種別の数値から表示されるボタンを取得

HASHTBL type

type[BTN_YES] = "はい"
type[BTN_NO] = "いいえ"
type[BTN_OK] = "OK"
type[BTN_CANCEL] = "キャンセル"
type[BTN_ABORT] = "中止"
type[BTN_RETRY] = "再試行"
type[BTN_IGNORE] = "無視"

DIM num = INPUT("数値を入力してください。")

IF VAL(num) = ERR_VALUE THEN EXIT

PRINT num
PRINT "----------"

FOR n = 0 TO 6
	IF (num AND POWER(2, n)) <> 0 THEN PRINT type[POWER(2, n)]
NEXT

MSGBOX("以下のボタンが表示されます", num)
  1. INPUT
  2. VAL
  3. POWER
  4. MSGBOX
結果
22
----------
キャンセル
はい
中止

Was this post helpful?

関連記事

MSGBOX
メッセージボックスを表示します。第一引数に表示するメッセージ、第二引数に表示するボタンの種類を指定します。押されたボタンをInteger型で返します。