はじめに
日本語プログラミング言語Mindの小技「プレースホルダを置換」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技はMind言語仕様による単語ではなく、ユーザー実装のライブラリ単語です。従って、Mind8プログラミングマニュアルには記載がありません。
7 文字列操作
├文字・文字列を置換する ←整数型・小数型と文字列型の型変換
└文字列の操作 ←部分文字列抽出、連結
他のプログラミング言語での補間文字列($"")は便利ですが、コンパイラが認識する変数名を置換するのは実装がたいへんなので、String.Formatの書式指定子({0}、{1}…)による置換みたいなのは比較的簡単そうなので、とりあえず実装してみました。
だいたい下記のような仕様の文字列置換単語を実装してみます。このバージョンで処理単語属性の設定はありません。助詞の強制もありませんので、下記の文例はあくまで例です。
構文=<プレースホルダ付き文字列1>を <文字列>で プレースホルダを1つ置換 → <文字列>
<プレースホルダ付き文字列2>を <文字列>と <文字列>で プレースホルダを2つ置換 → <文字列>
<プレースホルダ付き文字列3>を <文字列>と <文字列>と <文字列>で プレースホルダを3つ置換 → <文字列>注意 プレースホルダ内の引数番号は1から始まります。例 {1}、{2}、{3}
全角のプレースホルダもOK。例 {1}、{2}、{3}
ただし、全角半角混在のプレースホルダはNG。例 {1}、{2}、{3}
<プレースホルダ付き文字列n>の数字nはプレースホルダの数です。
本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。
対応バージョン
■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版
小技の解説
Mindの小技「プレースホルダを置換」は、Mindの文字列操作機能を使って実装した文字列置換機能です。「プレースホルダを1つ置換」は文字列の左端から置換対象プレースホルダを検索して、指定文字列で置換し、置換した文字列をスタックにのせます。
「プレースホルダを2つ置換」「プレースホルダを3つ置換」はそれぞれの引数番号のプレースホルダを2つまたは3つ置換します。
他のプログラミング言語の文字列置換機能では「Format」などがありますが、Mindで実装したこの機能はそれに近い機能のライブラリとなります。処理対象文字列内に同じ引数番号のプレースホルダが複数存在する場合、左側の最初のプレースホルダを一度だけ置換します。
下記のMind文字列操作単語を使って実装した「文字列置換」を使っています。
7 文字列操作
├文字列を調べる機能
│└文字・文字列を検索 「検索」「一文字検索」
└文字列の操作
├文字列の左右端の文字を得る 「一文字切り出し」
├文字列の左右端の部分文字列を得る「右側取り出し」
├文字列を分断する 「分断」
└文字列の簡易な合成 「第一合成文字列設定」
「さらに合成」「さらに一文字合成」
Mindプログラムソース
ライブラリソース
※replacestrings.srcの「文字列置換」を使用します。
ローカル。
プレースホルダ全角は 文字列定数配列 「{1}」、「{2}」、「{3}」、「{4}」、「{5}」。
プレースホルダ半角は 文字列定数配列 「{1}」、「{2}」、「{3}」、「{4}」、「{5}」。
指定位置プレースホルダ置換するとは (プレースホルダ付き置換元文字列、置換文字列、指定位置 → 置換後文字列)
置換元文字列情報は 文字列
置換文字列は 文字列
指定位置は 変数
置換対象文字列は 文字列
指定位置に 入れ
置換文字列に 入れ
置換元文字列情報に 入れ
置換対象文字列に プレースホルダ全角(指定位置)を 入れて
※全角プレースホルダの置換を試みる
置換元文字列情報の 置換対象文字列を 置換文字列で 文字列置換し 複写し
置換元文字列情報と 等しい文字列? でなければ 終わり つぎに
※全角プレースホルダが存在しなかった場合
置換対象文字列に プレースホルダ半角(指定位置)を 入れて
※半角プレースホルダの置換を試みる
置換元文字列情報の 置換対象文字列を 置換文字列で 文字列置換する。
グローバル。
プレースホルダを1つ置換するとは (プレースホルダ1つ付き置換元文字列、置換文字列 → 置換後文字列)
1つめの 指定位置プレースホルダ置換する。 (・ → 置換後文字列)
プレースホルダを2つ置換するとは (プレースホルダ2つ付き置換元文字列、置換文字列1、置換文字列2 → 置換後文字列)
置換文字列1は 文字列
置換文字列2は 文字列
置換文字列2に 入れ
置換文字列1に 入れ
置換文字列1で 1つめの 指定位置プレースホルダ置換し (・ → 置換後文字列)
置換文字列2で 2つめの 指定位置プレースホルダ置換する。 (・ → 置換後文字列)
プレースホルダを3つ置換するとは (プレースホルダ3つ付き置換元文字列、置換文字列1、置換文字列2、置換文字列3 → 置換後文字列)
置換文字列は 3つの 文字列
インデックスは 変数
置換文字列の 要素数で 回数指定し
置換文字列の 要素数に 1を 加え 回数を 引き インデックスに 入れ
置換文字列(インデックス)に 入れ
繰り返す
置換文字列の 要素数で 回数指定し
置換文字列(回数)で 回数の 指定位置プレースホルダ置換し (・ → 置換後文字列)
繰り返すこと。
プレースホルダを4つ置換するとは (プレースホルダ4つ付き置換元文字列、置換文字列1、置換文字列2、置換文字列3、置換文字列4 → 置換後文字列)
置換文字列は 4つの 文字列
インデックスは 変数
置換文字列の 要素数で 回数指定し
置換文字列の 要素数に 1を 加え 回数を 引き インデックスに 入れ
置換文字列(インデックス)に 入れ
繰り返す
置換文字列の 要素数で 回数指定し
置換文字列(回数)で 回数の 指定位置プレースホルダ置換し (・ → 置換後文字列)
繰り返すこと。
とりあえずプレースホルダ4つまでの置換を実装してみました。4つになると引数相当の置換文字列を4つ並べるので、配列で渡せるとよいなと考えておりますが、それはまた別の機会で対応してみます。
replacestrings.srcの「文字列置換」はこちらの記事を参照してください。
チェックプログラムソース
"replacestrings"を コンパイルする。
"replaceholder"を コンパイルする。
置換元文字列は 文字列定数 「MindなでしこCC++C#JavaTypescript」。
プレースホルダ付置換元文字列1は 文字列定数 「MindなでしこCC++C#{1}Typescript」。
プレースホルダ付置換元文字列2は 文字列定数 「Mindなでしこ{2}CC++C#{1}Typescript」。
プレースホルダ付置換元文字列3は 文字列定数 「Mindなでしこ{2}C++{3}{1}Typescript」。
プレースホルダ付置換元文字列4は 文字列定数 「Mindなでしこ{2}C++{3}{1}{4}Typescript」。
メインとは (・ → ・)
置換元文字列を 一行表示し
プレースホルダ付置換元文字列1を 「Mind」で プレースホルダを1つ置換し 一行表示し
プレースホルダ付置換元文字列2を 「Mind」と 「Mind2」で プレースホルダを2つ置換し 一行表示し
プレースホルダ付置換元文字列3を 「Mind」と 「Mind2」と
「Mind3」で プレースホルダを3つ置換し 一行表示し
プレースホルダ付置換元文字列4を 「Mind」と 「Mind2」と
「Mind3」と 「Mind4」で プレースホルダを4つ置換し 一行表示する。
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind replaceholdertest file
日本語プログラミング言語 Mind Version 9.03 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\mind9-beta\Mind9-beta-7\bin\mindex.exe --> replaceholdertest.exe
Mind8
C:\developments\vscode\mind9>mind replaceholdertest file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> replaceholdertest.exe
Mind7
C:\developments\vscode\mind9>mind replaceholdertest file
日本語プログラミング言語 Mind Version 7.5 for Windows
Copyright(C) 1985-2004 Scripts Lab. Inc.
Single user license. Serial No:********
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe -> replaceholdertest.exe
実行結果
つづいて実行してみます。
Mind7/8/9β
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
C:\developments\vscode\mind9>replaceholdertest
MindなでしこCC++C#JavaTypescript
MindなでしこCC++C#MindTypescript
MindなでしこMind2CC++C#MindTypescript
MindなでしこMind2C++Mind3MindTypescript
MindなでしこMind2C++Mind3MindMind4Typescript
C:\developments\vscode\mind9>
いかがでしょうか?最初の1行はプレースホルダなしのオリジナルの文字列で、2行目以降がプレースホルダ置換処理後の文字列です。この「プレースホルダを置換」のイメージがつかめれば幸いです。
参考情報
この小技「プレースホルダを置換」を使った記述例は未だありません。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。
本記事シリーズのご紹介
- ほとんどの記事ではMind7、8、そして9βでの検証を行っています。
- Mind8公式マニュアルの基礎情報をベースに、Mind7・8の上級者向け情報も網羅しています。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう
しい、カンタン、難しいのも書ける!みんなでやってみよう![]()