本ページには広告が含まれています。
引数に指定した文字列をモールス信号、またはモールス信号を文字列に変換します。
- 構文
- UString = Morse.encode( str )
- UString = Morse.decode( str )
- 引数
- str 必須
- encode
- エンコードする文字列
- decode
- デコードする文字列
- 戻り値
- 変換した文字列
プログラム
//////////////////////////////////////////////////
// 【引数】
// 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
プログラム実行例
指定した文字列のモールス信号を鳴らす
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関数 (自作関数)
- 文字列の暗号化・復号を行います。