はじめに
日本語プログラミング言語Mindの小技「文字列入力」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載があります。
8 入出力を行う単語
└コンソールからの入力
構文 = 文字列入力 → <文字列>
キーボードから文字列を受け取り、ライブラリ内部の文字列実体変数「入力文字列」に格納すると同時に、スタックにそこを指す文字列情報を返す。
~略~
文字列の入力中に文字の訂正(編集)をおこなうことができるが、それはOSの機能であるためMindは関知しない。エンターキーを打鍵することでMindに戻ってくるが、最後のエンターキーのコード(CRまたはLF)は返される文字列に含まれない。
本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。
対応バージョン
■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版
小技の解説
「文字列入力」はMindのコンソールアプリケーションでキーボードからの入力を処理する単語です。コンソールでユーザー入力を待機し、Enterキーの押下で入力文字列をスタックに返します。
ここでMind8の公式マニュアルには前記引用部で省略した注意事項が記載されていますので、そちらをまず引用いたします。
しかし入力した文字列の実体は、内部に確保された(大域変数としての)文字列実体変数「入力文字列」に格納されるので、ユーザプログラムから直接その変数を参照しても良い。
つまり、「文字列入力」は入力内容をスタックに返すのではありますが、内部の文字列実体変数にも格納しているということです。公式マニュアルではこの内部の文字列実体変数「文字列入力」を使用しない場合と使用している場合のコードサンプルが記載されています。
文字列実体変数「入力文字列」の詳細は、Mind7の付属の上級者向けドキュメントmind7\doc\console.docmに記載があります。
C7. CONSOLE内部で確保されている変数
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
CONSOLEでは次のグローバル変数が定義されています。なお、長さの指定で使っている定数シンボルについては(つまり変数の長さについては) string.docmを参照ください。--------------------------------
入力文字列は 文字列実体 長さ 入力文字列長さ。
--------------------------------
mind7\doc\string.docm
G1. 文字列実体の長さを表す数値定数
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
シンボル 値(Ver.7)
------------------------------
入力文字列長さは 4096
------------------------------
最大4096バイトの文字列が入力可能であることがわかります。
Mindの文字列実体変数については下記の記事に詳しく解説しています。
日本語プログラミング言語Mindの小技 「実体変数と情報変数の使い分け」~文字列の変数型2種徹底解説~
さらにアドバンストな内容についてご関心のある方は言語開発者ご自身である@killyさんの下記の解説記事をご参照ください。
それでは、この記事では文字列実体変数「入力文字列」を使用したコードサンプルでご説明いたします。
Mindプログラムソース
入力最大回数は 数値 10回。
※入力文字列長さは 数値 4096。CONSOLEで定義済
入力内容は 入力最大回数の 文字列実体 長さ 入力文字列長さ。
コンソールからの入力を受け付け空エンターで終了するとは (・ → 入力回数)
入力回数は 変数
入力回数を クリアして
ここから
「入力をお待ちしています>」を 表示し
文字列入力して
空列? (ここで文字列入力がスタックに返した文字列が使われた)
ならば 打ち切り
さもなければ
入力回数を 一つ増加し
入力文字列を 入力内容(入力回数)に 入れ
つぎに
入力回数が 入力最大回数に 等しい ならば 打ち切り つぎに
繰り返し
入力回数を 返す。
コンソールからの入力内容を表示するとは (入力回数 → ・)
(スタックにある入力回数で) 回数指定して
入力内容(回数)を ダブルクオートで囲んで表示し 改行し
繰り返すこと。
メインとは (・ → ・)
入力回数は 変数
「入力を受け付け開始します。最大」を 表示し
入力最大回数を 数値表示し 「回入力できます。」を 一行表示し
コンソールからの入力を受け付け空エンターで終了し
入力回数に 入れ
「入力を受け付け終了しました。」を 一行表示し
「入力した文字列は」を 一行表示し
入力回数が ゼロ?
ならば
「なかったようです。なにも入力しませんでしたね。」を 一行表示
さもなければ
入力回数で コンソールからの入力内容を表示し
つぎに。
このサンプルの特徴は、コンソール入力を繰り返すので1回ごとに文字列実体変数「入力文字列」が上書きされますので、入力回数分の文字列実体を配列として用意して、入力の都度そちらに退避させているところです。
「文字列入力」は「コンソールからの入力を受け付け空エンターで終了する」の中で1回だけ記述しています。
「文字列入力」が返した文字列は打ち切り条件の判定「空列?」で使われています。これは公式マニュアルのサンプルにもある王道ですね。
「文字列入力」が内部でセットした文字列実体変数「入力文字列」は、アプリケーション側で用意した10回分の入力文字列の配列「入力内容」へ代入するヶ所で使用されています。
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind consoleInput file
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> consoleInput.exe
Mind8
C:\developments\vscode\mind9>mind consoleInput file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> consoleInput.exe
Mind7
C:\developments\vscode\mind9>mind consoleInput 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 -> consoleInput.exe
実行結果
つづいて実行してみます。
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
最初は、いきなりエンターを押した場合の結果です。
C:\developments\vscode\mind9>consoleInput
入力を受け付け開始します。最大10回入力できます。
入力をお待ちしています>
入力を受け付け終了しました。
入力した文字列はなかったようです。なにも入力しませんでしたね。
c:\developments\vscode\mind9>
いかがでしたでしょうか?イメージつかめてますでしょうか?
続いて、3回なにかを入力してみます。
C:\developments\vscode\mind9>consoleInput
入力を受け付け開始します。最大10回入力できます。
入力をお待ちしています>1回目の入力内容です。
入力をお待ちしています>2回目の入力内容です。
入力をお待ちしています>3回目の入力内容です。
入力をお待ちしています>
入力を受け付け終了しました。
入力した文字列は
"1回目の入力内容です。"
"2回目の入力内容です。"
"3回目の入力内容です。"
C:\developments\vscode\mind9>
上の例では4回目の入力時に空エンターを打って終わらせています。
つづいて、最大回数の10回、なにかを入力します。
C:\developments\vscode\mind9>consoleInput
入力を受け付け開始します。最大10回入力できます。
入力をお待ちしています>1回目の入力内容です。
入力をお待ちしています>2回目の入力内容です。
入力をお待ちしています>3回目の入力内容です。
入力をお待ちしています>4回目の入力内容です。
入力をお待ちしています>5回目の入力内容です。
入力をお待ちしています>6回目の入力内容です。
入力をお待ちしています>7回目の入力内容です。
入力をお待ちしています>8回目の入力内容です。
入力をお待ちしています>9回目の入力内容です。
入力をお待ちしています>10回目の入力内容です。
入力を受け付け終了しました。
入力した文字列は
"1回目の入力内容です。"
"2回目の入力内容です。"
"3回目の入力内容です。"
"4回目の入力内容です。"
"5回目の入力内容です。"
"6回目の入力内容です。"
"7回目の入力内容です。"
"8回目の入力内容です。"
"9回目の入力内容です。"
"10回目の入力内容です。"
C:\developments\vscode\mind9>
ちょっと入力内容に芸がありませんが、今回のケースでは10回目の文字列を入力し終わってエンターを押した後は、入力待ちプロンプト「入力をお待ちしています>」は表示されずに、入力内容表示処理に移っていることがわかります。
参考情報
この小技「文字列入力」を使った記述例の記事はまだありません。みつけたら教えてください。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。
本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできます。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう