3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語プログラミング言語Mindの小技 「文字列置換」~文字列の一部を置換する~

3
Last updated at Posted at 2026-03-01

はじめに

日本語プログラミング言語Mindの小技「文字列置換」について説明したいと思います。

対象読者

日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方

この小技に関連するMind言語マニュアル

この小技に関連するMind言語仕様はMind8プログラミングマニュアルに記載がありません。

7 文字列操作
├文字・文字列を置換する ←整数型・小数型と文字列型の型変換
└文字列の操作 ←部分文字列抽出、連結

Mind7/8のインストールフォルダを「文字列置換」で検索しても、該当単語存在しませんでした。

そこで、既存の文字列操作単語を組み合わせて、だいたい下記のような仕様の文字列置換単語を実装してみます。このバージョンで処理単語属性の設定はありません。助詞の強制もありませんので、下記の文例はあくまで例です。

構文=<文字列>の <文字列>を <文字列>で 文字列置換  → <文字列>

本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。

対応バージョン

■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版

小技の解説

Mindの小技「文字列置換」は、Mindの文字列操作機能を使って実装した文字列置換機能です。「文字列置換」は文字列の左端から置換対象文字列を検索して、指定文字列で置換し、置換した文字列をスタックにのせます。

他のプログラミング言語の文字列置換機能では「replace」などがありますが、Mindで実装したこの機能はそれに近い機能のライブラリとなります。処理対象文字列内に置換対象文字列が複数存在する場合、左側の最初の置換対象文字列を一度だけ置換します。

下記のMind文字列操作単語を使って実装しています。

7 文字列操作
├文字列を調べる機能
│└文字・文字列を検索           「検索」「一文字検索」
└文字列の操作
 ├文字列の左右端の文字を得る     「一文字切り出し」
 ├文字列の左右端の部分文字列を得る「右側取り出し」
 ├文字列を分断する             「分断」
 └文字列の簡易な合成            「第一合成文字列設定」
                            「さらに合成」「さらに一文字合成」

Mindプログラムソース

ライブラリソース

replacestrings.src
	グローバル。
    
文字列置換するとは  (置換元文字列、置換対象文字列、置換文字列 → 置換後文字列)
        置換元文字列情報は 文字列
        置換対象文字列は   文字列
        置換文字列は       文字列
        置換文字位置は     変数
        分断時手前文字列は 文字列
        補正文字数は       変数
    
    置換文字列に 入れ
    置換対象文字列に 入れ
    置換元文字列情報に 入れ

    置換対象文字列が 空列?
    ならば
        置換元文字列情報をつみ 終わり
    つぎに

    置換対象文字列の 文字数が 1文字に 等しい
    ならば
        置換元文字列情報から 
        置換対象文字列から 一文字切り出し (文字列 → 文字) 
        一文字検索し 置換文字位置に 入れ
    さもなければ
        置換元文字列情報から 置換対象文字列を 検索し 置換文字位置に 入れ
    つぎに

    置換文字位置が 0に 等しい ※置換元文字列情報に該当文字列なし
    ならば
        置換元文字列情報をつみ 終わり
    つぎに

    置換元文字列情報を 置換文字位置で 分断し 分断時手前文字列に 入れておき

    置換対象文字列の 文字数が 1文字より 大きい
    ならば ※分断後の置換元文字列情報には置換対象文字列の一部が残っているので除去しておく
        置換対象文字列の 文字数から 1を 引いて 補正文字数に 入れ
        置換元文字列情報の 文字数から 補正文字数を 引いて 補正文字数に 入れ
        置換元文字列情報から 補正文字数だけ 右側取り出し 置換元文字列情報に 入れ
    つぎに

    分断時手前文字列を  第一合成文字列設定し
    置換文字列の 文字数が 1文字に 等しい
    ならば
        置換文字列から 一文字切り出し (文字列 → 文字) さらに一文字合成し 捨て
    さもなければ
        置換文字列を さらに合成し 捨て
    つぎに

    置換元文字列情報の 文字数が 1文字に 等しい
    ならば
        置換元文字列情報から 一文字切り出し (文字列 → 文字) さらに一文字合成し (・ → 置換後文字列)
    さもなければ
        置換元文字列情報を さらに合成し (・ → 置換後文字列)
    つぎに。

置換対象文字列の文字数が1文字の場合、「一文字切り出し」を使って置換対象文字列の文字列型を文字型(整数型)に変換して「一文字検索」に渡しています。

文字列が1文字だった場合は文字型に変換して一文字系の処理単語を使うようにしているのは、公式マニュアルの下記の注意書きによるものです。

7 文字列操作
└文字列を調べる機能
 └文字・文字列を検索     「検索」「一文字検索

注 後者のケース(1文字だけの検索キーを指定して「検索」すること)では、対象文字列の中に漢字が含まれると、漢字コードの第2バイト目を拾って誤動作することがある。「一文字検索」ではそのような誤動作はない。なお、「検索」であっても、長さ2文字以上の検索キーを指定するならこのような誤動作はない。

「一文字検索」以外は問題ないかもしれませんが、念のため「さらに合成」でも一文字系で行うようにしています。

チェックプログラムソース

replacetest.src
"replacestrings"を コンパイルする。

置換元文字列は 文字列定数 「MindなでしこCC++C#JavaTypescript」。

メインとは (・ → ・)
    置換元文字列を 一行表示し
    置換元文字列の 「」を 「Mind」で 文字列置換し 一行表示し ※該当なし
    置換元文字列の 「Java」を 「」で 文字列置換し 一行表示し ※空列で置換
    置換元文字列の 「Java」を 「Mind」で 文字列置換し 一行表示し
    置換元文字列の 「C」を 「Mind」で 文字列置換し 一行表示し ※置換対象文字列が1文字
    置換元文字列の 「Mind」を 「C」で 文字列置換し 一行表示し ※置換文字列が1文字
    置換元文字列の 「C#」を 「Mind」で 文字列置換し 一行表示する。

コンパイル結果

ではコンパイルしてみます。下位ライブラリはfileを指定します。

Mind9

下図はMind9βです。

C:\developments\vscode\mind9>mind replacetest file

日本語プログラミング言語 Mind Version 9.03 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\mind9-beta\Mind9-beta-7\bin\mindex.exe --> replacetest.exe

Mind8

C:\developments\vscode\mind9>mind replacetest file

日本語プログラミング言語 Mind Version 8.07 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> replacetest.exe

Mind7

C:\developments\vscode\mind9>mind replacetest 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 -> replacetest.exe

実行結果

つづいて実行してみます。

Mind7/8/9β

Mind8の結果です。記述は割愛していますがMind7/9βも同じです。

C:\developments\vscode\mind9>replacetest          
MindなでしこCC++C#JavaTypescript
MindなでしこCC++C#JavaTypescript
MindなでしこCC++C#Typescript
MindなでしこCC++C#MindTypescript
MindなでしこMindC++C#JavaTypescript
CなでしこCC++C#JavaTypescript
MindなでしこCC++MindJavaTypescript

C:\developments\vscode\mind9>

いかがでしょうか?最初の1行はオリジナルの文字列で、2行目以降が置換処理後の文字列です。2行目の結果は空列を置換対象文字列とした場合で無処理の文字列が返ってきます。「C」が置換対象文字列の場合、複数ヶ所該当しますが、最初の1つが置換されていることがわかります。この「文字列置換」のイメージがつかめれば幸いです。

参考情報

この小技「文字列置換」を使った記述例は未だありません。

おわりに

いかがでしたでしょうか?なにかの参考になれば幸いです。

本記事シリーズのご紹介

  • ほとんどの記事ではMind7、8、そして9βでの検証を行っています。
  • Mind8公式マニュアルの基礎情報をベースに、Mind7・8の上級者向け情報も網羅しています。

興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。

面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう:relaxed:しい、カンタン、難しいのも書ける!みんなでやってみよう:relaxed:

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?