- 構文
- POS( 探す文字, 探される文字列, [n個目] )
- 引数
- 探す文字
- 探したい文字列
- 探される文字列
- 探される文字列
- n個目
- nを指定するとn個目の文字位置を返す(マイナス値で指定すると後ろからサーチ)
- 戻値
見つかった位置 (1から)
(見つからなければゼロを返す)
(大文字,小文字の区別はしません)
※ANSI(バイト)処理の場合は POSB
文字列が存在するかを調べる
IF POS(探す文字列, 探される文字列) <> 0 THEN
存在するときの処理
ELSE
存在しないときの処理
ENDIF
プログラム実行例
無線LANのインターフェイス情報を取得
HASHTBL LAN
str = SPLIT(DOSCMD("netsh wlan show interface"), "<#CR>")
FOR n = 0 TO UBound(str)
IFB POS(":", str[n]) THEN
arr = SPLIT(str[n], ":")
LAN[TRIM(arr[0])] = TRIM(arr[1])
ENDIF
NEXT
DIM items[] = "名前", "説明", "GUID", "物理アドレス", "状態", + _
"SSID", "BSSID", "ネットワークの種類", "無線の種類", "認証", + _
"暗号", "接続モード", "チャネル", "受信速度 (Mbps)", "送信速度 (Mbps)", + _
"シグナル", "プロファイル", "ホストされたネットワークの状態"
FOR item IN items
PRINT item + ":" + LAN[item]
NEXT
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
- 結果
- 名前:ワイヤレス ネットワーク接続
説明:Intel(R) WiFi Link 1000 BGN
GUID:***
物理アドレス:74
状態:接続されました
SSID:***
BSSID:18
ネットワークの種類:インフラストラクチャ
無線の種類:802.11n
認証:WPA2-パーソナル
暗号:CCMP
接続モード:自動接続
チャネル:10
受信速度 (Mbps):72
送信速度 (Mbps):72
シグナル:80%
プロファイル:***
ホストされたネットワークの状態:利用不可
ユーザー名を取得
HASHTBL ENV
DIM str = SPLIT(DOSCMD("SET"), "<#CR>")
FOR n = 0 TO UBound(str)
IFB POS("=", str[n]) THEN
arr = SPLIT(str[n], "=")
ENV[TRIM(arr[0])] = TRIM(arr[1])
ENDIF
NEXT
PRINT ENV["USERNAME"]
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
解説
- 1行目
連想配列ENVを宣言します。環境を表すEnvironmentの略です。HASHTBL ENV
- 3行目
コマンドプロンプトでSETコマンドを実行し環境変数を取得します。その結果を改行毎にstr配列に格納します。str[0]=1行目、str[1]=2行目、str[n]=n+1行目、…という風に格納されます。DIM str = SPLIT(DOSCMD("SET"), "<#CR>")
- 5行目
変数nが0からstr配列の要素数分処理を繰り返します。str配列の要素数はSETコマンドの出力結果の行数-1となります。FOR n = 0 TO UBound(str)
- 6-9行目
もしstr[n]に"="が含まれていたら、"="を区切り文字列としてarr配列に格納します。arr[0]にstr[n]の"="より前の文字列、arr[1]にstr[n]の"="より後の文字列が格納されます。その後、arr[0]をキー、arr[1]を値として連想配列ENVに格納します。簡単に説明すると、str[n]の"="より前の文字列をキー、"="より後を値として連想配列を作成しています。IFB POS("=", str[n]) THEN arr = SPLIT(str[n], "=") ENV[TRIM(arr[0])] = TRIM(arr[1]) ENDIF
- 12行目
ENV["USERNAME"]の値を出力します。PRINT ENV["USERNAME"]
デフォルトプリンターを取得
CONST ssfPRINTERS = 4
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfPRINTERS)
DIM FolderItems = Folder.Items
HASHTBL iColumn
FOR n = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT
FOR n = 0 TO FolderItems.Count - 1
DIM FolderItem = FolderItems.Item(n)
DIM PrinterName = Folder.GetDetailsOf(FolderItem, iColumn["名前"])
FOR i = 0 TO FolderItem.Verbs.Count - 1
IF POS("通常使うプリンターに設定", FolderItem.Verbs.Item(i).Name) <> 0 THEN CONTINUE 2
NEXT
PRINT PrinterName
BREAK
NEXT
- 結果
- Brother DCP-J963N Printer
この記事は役に立ちましたか?