Morseモールス関数

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

引数に指定した文字列をモールス信号、またはモールス信号を文字列に変換します。

構文
  1. UString = Morse.encode( str )
  2. UString = Morse.decode( str )
引数
str 必須
encode
エンコードする文字列
decode
デコードする文字列
区切りは半角スペース
戻り値
変換した文字列

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   str : (encode : エンコードする文字列、decode : デコードする文字列)区切りは半角スペース 
// 【戻り値】
//   変換した文字列 
//////////////////////////////////////////////////
MODULE Morse
	HASHTBL code
	PROCEDURE Morse()
		code["A"] = "・-"
		code["B"] = "-・・・"
		code["C"] = "-・-・"
		code["D"] = "-・・"
		code["E"] = "・"
		code["F"] = "・・-・"
		code["G"] = "--・"
		code["H"] = "・・・・"
		code["I"] = "・・"
		code["J"] = "・---"
		code["K"] = "-・-"
		code["L"] = "・-・・"
		code["M"] = "--"
		code["N"] = "-・"
		code["O"] = "---"
		code["P"] = "・--・"
		code["Q"] = "--・-"
		code["R"] = "・-・"
		code["S"] = "・・・"
		code["T"] = "-"
		code["U"] = "・・-"
		code["V"] = "・・・-"
		code["W"] = "・--"
		code["X"] = "-・・-"
		code["Y"] = "-・--"
		code["Z"] = "--・・"
		code["1"] = "・----"
		code["2"] = "・・---"
		code["3"] = "・・・--"
		code["4"] = "・・・・-"
		code["5"] = "・・・・・"
		code["6"] = "-・・・・"
		code["7"] = "--・・・"
		code["8"] = "---・・"
		code["9"] = "----・"
		code["0"] = "-----"
		code["."] = "・-・-・-"
		code[","] = "--・・--"
		code["?"] = "・・--・・"
		code["--"] = "-・・・-"
		code["-"] = "-・・・・-"
		code["/"] = "-・・-・"
		code["@"] = "・--・-・"
		FOR n = 0 TO LENGTH(code)
			code[code[n, HASH_VAL]] = code[n, HASH_KEY]
		NEXT
	FEND
	FUNCTION encode(str)
		DIM res = ""
		FOR n = 1 TO LENGTH(str)
			res = res + code[COPY(str, n, 1)] + " "
		NEXT
		RESULT = TRIM(res)
	FEND
	FUNCTION decode(str)
		DIM res = ""
		DIM arr = SPLIT(str, " ")
		FOR n = 0 TO UBound(arr)
			res = res + code[arr[n]]
		NEXT
		RESULT = res
	FEND
ENDMODULE

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します 
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND

プログラム実行例

指定した文字列のモールス信号を鳴らす

UWSC
DEF_DLL Beep(long, long): long: kernel32.dll

DIM frequency = 880    // 周波数
DIM dot = 50           // 短点の長さ(ms)

DIM str = MORSE.encode("UWSC")
DIM len = LENGTH(str) -1
DIM array[len][2]

FOR i = 0 TO len
	SELECT COPY(str, i+1, 1)
		CASE "・"
			array[i][0] = dot
			array[i][1] = TRUE
		CASE "−"
			array[i][0] = dot * 3
			array[i][1] = TRUE
		CASE " "
			array[i][0] = dot
			array[i][1] = FALSE
	SELEND
NEXT

FOR i = 0 TO UBound(array)
	IFB array[i][1] THEN
		Beep(frequency, array[i][0])
	ELSE
		SLEEP(array[i][0] / 1000)
	ENDIF
NEXT

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します 
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
使用関数

関連記事

MODULE化
QuotedPrintable関数 (自作関数)
Quoted-printableのエンコード・デコードを行います。
Base64関数 (自作関数)
Base64のエンコード・デコードを行います。
Cipher関数 (自作関数)
文字列の暗号化・復号を行います。