INPUTインプット関数

本ページには広告が含まれています。

インプットボックスにメッセージを表示し、ユーザーが入力したテキストを取得することができます。

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

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

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

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

使い方

文字列を入力

名前を入力するインプットボックスを表示します。入力された名前はstrに代入され文字列として使用することができ、MSGBOX関数で入力された名前を使ってメッセージを表示します。

UWSC
DIM str = INPUT("名前を入力してください。")
MSGBOX(str + " さん、こんにちは。")
.png

何も入力せずにOKを押した場合は空文字列が返り、Cancelまたはを押したときはEmptyが戻り値として返ります。

以下はインプットボックスに田中と入力したときの例です。

入力.png

インプットボックスに入力した文字列をstrで取得し、その名前をMSGBOX関数に表示しています。

結果.png

ドロップしたファイルパスを取得

ファイルをドロップすることでそのファイルのパスを入力することができます。複数のファイルをドロップした場合は、タブで結合されます。

以下はドロップで入力されたファイル名をタブで分割しarrayで各要素に格納・出力するプログラムです。

UWSC
DIM str = INPUT("ファイルをドロップしてください。(複数可)")
DIM array = SPLIT(str, "<#TAB>")

FOR path IN array
	PRINT path
NEXT

入力形式の指定

入力された文字列を正規表現でチェックし、形式が合わない場合は再入力させます。reTest関数 (自作関数)で入力形式のチェックを行っています。

以下は入力値を数値で取得したいので、正規表現は\d+です。

キャンセル時は終了します。

UWSC
REPEAT
	DIM str = INPUT("数値を入力してください。")
	IF str = EMPTY THEN EXIT
UNTIL reTest(str, "\d+")

PRINT str

郵便番号のチェックを行う場合000-0000(3桁-4桁)の形式になるので、正規表現に\d{3}-\d{4}を指定します。

UWSC
REPEAT
	DIM str = INPUT("郵便番号を入力してください。")
	IF str = EMPTY THEN EXIT
UNTIL reTest(str, "\d{3}-\d{4}")

PRINT str

デフォルト値

第二引数のデフォルト値を指定すると、インプットボックスを表示したときにデフォルト値を表示することができます。以下のプログラムでは今日の日付をデフォルト値として表示しています。

UWSC
DIM date = INPUT("日付を入力してください。", today())
PRINT date

パスワードフラグ

第三引数のパスワードフラグにTrueを指定すると、入力した文字列が伏せ字になりセキュリティ向上に繋がります。

UWSC
DIM str = INPUT("パスワードを入力",, TRUE)
PRINT str

パスワードフラグがTrueになっているときは半角文字しか入力することができません。メモ帳などで入力した全角の文字列をペーストすることはできます。

パスワード.png

伏せ字にはなっていますがGETITEM関数GETSTR関数では取得することができます。

座標

インプットボックスは基本的に画面中央に表示させるものですが、引数X,Yにインプットボックスを表示する座標を指定することもできます。引数を省略した場合は画面中央に表示されます。両引数に-1を指定した場合のみ前回インプットボックスを表示した位置に表示されます。

以下のプログラムで2回目のインプットボックスは1回目と同じ(x,y)=(10,20)の位置に表示されます。

UWSC
INPUT("1回目",,, 10, 20)
INPUT("2回目",,, -1, -1)

インプットボックスの座標をx座標,y座標の片方のみを 前回と同じ位置にすることはできません。

以下のように1回目を(x,y)=(10,20)の位置、2回目はx座標にだけ-1を指定し前回値を使うということはできません。以下はx座標の-1が画面外になるので0となり(x,y)=(0,100)の位置に表示されます。

UWSC
INPUT("1回目",,, 10, 20)
INPUT("2回目",,, -1, 100)

片方のみ前回と同じ位置にしたい場合は、変数を使います。

UWSC
DIM x = 10
INPUT("1回目",,, x, 20)
INPUT("2回目",,, x, 100)

入力データの型

INPUT関数の戻り値の型は入力されたデータによってANSI文字列、もしくはUNICODE文字列の型で返されます。

半角数字32文字以内であればANSI文字列、それ以外のデータはUNICODE文字列の型となります。

以下は入力されたデータがANSI文字列型かUNICODE文字列型かを調べるプログラムです。キャンセルボタンが押されるまで型を調べ続けます。

UWSC
HASHTBL type
type[256] = "ANSI"
type[258] = "Unicode"

WHILE TRUE
	DIM str = INPUT("入力")
	IF str = EMPTY THEN BREAK
	PRINT str
	PRINT type[VARTYPE(str)]
	PRINT "-----"
WEND
結果
プレーンテキスト
INPUT:6>123
ANSI
-----
INPUT:6>12345678901234567890123456789012
ANSI
-----
INPUT:6>123456789012345678901234567890123
Unicode
-----
INPUT:6>@
Unicode
-----
INPUT:6>UWSC
Unicode
-----
INPUT:6>UWSC
Unicode
-----
INPUT:6>文字列
Unicode
-----

プログラム実行例

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

UWSC
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
結果
プレーンテキスト
INPUT:10>a=2
INPUT:10>b=3
INPUT:10>a*b
6

パスワードを生成

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

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

UWSC
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
結果
プレーンテキスト
D659nv9Z6Q1t1MXjXfPUMMe35r012a639
XsQg7139wsUWF2q764f9AiopT451aULBC
A8a2t7Iq0Tl7Ij3W4p5RmQ97ElwvkWeG4
u8RTBF1aDt365Y436XC09Uo5X9kWHc4dS
AeCg2uNoUrCR9FsjYHtdhHg2bB6S92NhY
3eR4l89x7WGf1SZTlpDcIbBc25IbEgk4a
nuT94OR530poRBt9s0wF1b275qAfGDOHa
KTRa7wmEHjab2MopiT8u3aPwI6ntWmMt5
Bz626hGf9GS6yeZQyHrIAbEk1N0fs1ZL5
6Nze7rld3Rmd0tU0Y6kgP1AUwab0bjQlR
11C0x8862eOP1AVjVlXz7rEl4nKkR91Hf
使用関数

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

UWSC
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
結果
プレーンテキスト
INPUT:3>7
文月
使用関数
解説

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

UWSC
PRINT ENCODE(ENCODE(INPUT("エンコードする文字列を入力してください。"), CODE_ANSI), CODE_URL)
使用関数

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

UWSC
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
使用関数

パス文字列を生成します

UWSC
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("フォルダ名もしくはファイル名を入力してください。"))
使用関数

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

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

IFB FSO.FolderExists(FolderName) THEN
	MSGBOX("「" + FolderName + "」フォルダは存在します。")
ELSE
	MSGBOX("「" + FolderName + "」フォルダは存在しません。")
ENDIF
使用関数

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

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

IFB FSO.FileExists(path) = TRUE THEN
	MSGBOX("「" + path + "」は存在します。")
ELSE
	MSGBOX("「" + path + "」は存在しませn。")
ENDIF
使用関数

Googleでの検索結果を取得

UWSC
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
使用関数

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

UWSC
PRINT ENCODE(ENCODE(INPUT("エンコードする文字列を入力してください。"), CODE_UTF8), CODE_URL)
使用関数

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

UWSC
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
使用関数

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

UWSC
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)
結果
プレーンテキスト
22
----------
キャンセル
はい
中止

関連記事

MSGBOX関数 (スクリプト関数)
メッセージボックスを表示します。第一引数に表示するメッセージ、第二引数に表示するボタンの種類を指定します。押されたボタンをInteger型で返します。
ChooseColorA(Comdlg32.dll)