COPY

構文
COPY( 文字列, 開始位置, [コピー文字数] )
引数
文字列
コピー元の文字列
開始位置
コピーすべき文字列の開始位置(1から)
コピー文字数
コピーすべき文字数(省略時は最後の文字まで)
戻値

結果の文字列

ANSI(バイト)処理の場合はCOPYB

プログラム実行例

ポップアップメニューで選択した項目を出力(サブメニューあり)

DIM menu[] = "項目1", "項目2", "{項目2-1", "項目2-2}", "項目3", "{項目3-1", "項目3-2", "項目3-3}", "項目4", "項目5" DIM res = POPUPMENU(menu) // サブメニューとして指定する際に必要な「{ }」を削除 IF COPY(menu[res], 1, 1) = "{" THEN menu[res] = COPY(menu[res], 2) IF COPY(menu[res], LENGTH(menu[res], 1)) = "}" THEN menu[res] = COPY(menu[res], 1, LENGTH(menu[res] - 1)) PRINT menu[res]

Tempフォルダのフォルダをデスクトップに移動

CONST ssfDesktop = 0 CONST TemporaryFolder = 2 DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") DIM Folder = FSO.GetSpecialFolder(TemporaryFolder) DIM source = FSO.BuildPath(Folder.Path, "NewFolder") DIM Shell = CREATEOLEOBJ("Shell.Application") Folder = Shell.NameSpace(ssfDesktop) DIM path = Folder.Self.Path DIM destination = path + IIF(COPY(path, LENGTH(path)) = "\", "", "\") FSO.MoveFolder(source, destination) ////////////////////////////////////////////////// // 【引数】 // expr : 評価する式 // truepart : 評価した式がTrueのときに返す値 // falsepart : 評価した式がFalseのときに返す値 // 【戻値】 // truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき ////////////////////////////////////////////////// FUNCTION IIF(expr, truepart, falsepart) IFB VAL(expr) THEN RESULT = truepart ELSE RESULT = falsepart ENDIF FEND

Tempフォルダのフォルダをデスクトップにコピー

CONST ssfDesktop = 0 CONST TemporaryFolder = 2 DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") DIM Folder = FSO.GetSpecialFolder(TemporaryFolder) DIM source = FSO.BuildPath(Folder.Path, "NewFolder") DIM Shell = CREATEOLEOBJ("Shell.Application") Folder = Shell.NameSpace(ssfDesktop) DIM path = Folder.Self.Path DIM destination = path + IIF(COPY(path, LENGTH(path)) = "\", "", "\") FSO.CopyFolder(source, destination) ////////////////////////////////////////////////// // 【引数】 // expr : 評価する式 // truepart : 評価した式がTrueのときに返す値 // falsepart : 評価した式がFalseのときに返す値 // 【戻値】 // truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき ////////////////////////////////////////////////// FUNCTION IIF(expr, truepart, falsepart) IFB VAL(expr) THEN RESULT = truepart ELSE RESULT = falsepart ENDIF FEND

ハイアンドロー

DIM cards[-1] DIM mark[3] = "♠", "♥", "♣", "♦" FOR item IN mark FOR n = 1 TO 13 arrayPush(cards, item + n) NEXT NEXT FisherYates(cards) FOR n = 0 TO UBound(cards) - 1 DIM res = SLCTBOX(SLCT_BTN OR SLCT_NUM, 0, "次のカードは「 " + cards[n] + " 」よりHIGH、LOW?", "HIGH", "LOW") PRINT cards[n] + "<#TAB>" + COPY(cards[n], 2) PRINT cards[n+1] + "<#TAB>" + COPY(cards[n+1], 2) DIM before = VAL(COPY(cards[n], 2)) DIM after = VAL(COPY(cards[n+1], 2)) IF res = 0 THEN operator = "<" IF res = 1 THEN operator = ">" res = IIF(before + operator + "=" + after, "正解", "不正解") PRINT res IF res = "不正解" THEN EXIT PRINT "----------" NEXT MSGBOX("全問正解!!!") ////////////////////////////////////////////////// // 【引数】 // array : 要素を追加する配列(参照引数) // str : 追加する要素 // 【戻値】 // 処理後の配列の中の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var arr[], str) DIM res = RESIZE(arr, UBound(arr) + 1) arr[res] = str RESULT = res + 1 FEND ////////////////////////////////////////////////// // 【引数】 // var arr[] : シャッフルする配列(参照引数) // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE FisherYates(var arr[]) FOR n = UBound(arr) TO 0 STEP -1 DIM num = RANDOM(n+1) DIM tmp = arr[n] arr[n] = arr[num] arr[num] = tmp NEXT FEND ////////////////////////////////////////////////// // 【引数】 // expr : 評価する式 // truepart : 評価した式がTrueのときに返す値 // falsepart : 評価した式がFalseのときに返す値 // 【戻値】 // truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき ////////////////////////////////////////////////// FUNCTION IIF(expr, truepart, falsepart) IFB VAL(expr) THEN RESULT = truepart ELSE RESULT = falsepart ENDIF FEND ////////////////////////////////////////////////// // 【引数】 // 配列 : 上限値を求める配列 // 【戻値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(array[]) RESULT = RESIZE(array) FEND
結果
♦12	12
♠1	1
正解
----------
♠1	1
♥7	7
正解
----------
♥7	7
♥13	13
正解
----------
♥13	13
♦9	9
正解
----------
♦9	9
♥1	1
正解
----------
♥1	1
♥5	5
正解
----------
♥5	5
♥10	10
正解
----------
♥10	10
♣4	4
正解
----------
♣4	4
♠10	10
正解
----------
♠10	10
♥6	6
不正解

今年の恵方を求める

DIM year = getYear(today()) // 西暦の下1桁 DIM y = COPY(year, LENGTH(year), 1) SELECT y CASE 0; PRINT "西南西微西" CASE 1; PRINT "南南東微南" CASE 2; PRINT "北北西微北" CASE 3; PRINT "南南東微南" CASE 4; PRINT "東北東微東" CASE 5; PRINT "西南西微西" CASE 6; PRINT "南南東微南" CASE 7; PRINT "北北西微北" CASE 8; PRINT "南南東微南" CASE 9; PRINT "東北東微東" SELEND ////////////////////////////////////////////////// // 【引数】 // date : 日付(”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”) // 【戻値】 // 指定した日付の「年」 ////////////////////////////////////////////////// FUNCTION getYear(date) GETTIME(0, date) RESULT = G_TIME_YY4 FEND ////////////////////////////////////////////////// // 【引数】 // // 【戻値】 // 今日の日付 ////////////////////////////////////////////////// FUNCTION today() GETTIME() RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 FEND
結果
西南西微西

ソウルナンバーを求める

桁が一桁になるか、ゾロ目になるまで各桁を足し続ける。

生年月日をyyyymmddの形式で指定する。

DIM n = 20000501 REPEAT n = digitSum(n) UNTIL LENGTH(n) = 1 OR COPY(n, 1, 1) = COPY(n, 2, 1) PRINT n ////////////////////////////////////////////////// // 【引数】 // num : 数値(正の整数) // 【戻値】 // 各桁の数値の和 ////////////////////////////////////////////////// FUNCTION digitSum(num) DIM res = 0 IFB VARTYPE(ABS(num, VAR_DWORD)) = num THEN // 正の整数ならば FOR n = 1 TO LENGTH(num) res = res + VAL(COPY(num, n, 1)) NEXT ELSE res = ERR_VALUE ENDIF RESULT = res FEND
結果
8

重み付きで数値を取得

5/10で「1」、3/10で「2」、2/10の確率で「3」を出現させます。

DIM str = "1111122233" FOR n = 1 TO 10 PRINT VAL(COPY(str, RANDOM(LENGTH(str)) + 1, 1)) NEXT
結果
2
2
1
1
3
1
1
3
3
1

この記事は役に立ちましたか?
役に立った 役に立たなかった