コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
しょうご ◆tpp2zBc4h8pI
2018/4/22 21:15
質問
文字列変数
複数の文字列変数をひとつの文字列変数にまとめて保存し、読み込みを行った際に再び文字列変数を複数にするにはどうすればよいのでしょうか?

コメント

アバター
はる 2018/4/22 21:24 ◆75Vh4SY8TdKS
文字列を区切る文字列として使わない文字列で区切り、
読み込む際はその文字列で切り離せばいいと思います。
アバター
say 2018/4/22 21:26 ◆1nbKtD/tFu04
セパレート文字?っていうのを設定しといて、strlenでそのセパレート文字?の位置を探して抽出

ぱっと考えたらこんな感じ
アバター
はる 2018/4/22 21:44 ◆75Vh4SY8TdKS
strlenはPHPの関数で、
文字列の長さを返します。
アバター
say 2018/4/22 21:52 ◆1nbKtD/tFu04
失礼
instrでした
アバター
しょうご 2018/4/22 21:58 ◆tpp2zBc4h8pI
この命令は文字列を探してあるのか無いのかを数値で返す命令ということでしょうか?
アバター
しょうご 2018/4/22 22:00 ◆tpp2zBc4h8pI
質問ですが、セパレート文字とはどのような物なのでしょうか?
アバター
こういち 2018/4/22 22:15 ◆ou0jbJnEJ0Kb
(strlen()はLEN()のことかと思ったら予想の斜め上だった。)
セパレート文字は文字列と文字列を区切る文字ですね。
,やCHR$(10)あたりがよく使われます。
アバター
しょうご 2018/4/22 22:51 ◆tpp2zBc4h8pI
変数、セパレート、変数、セパレートといった感じでしょうか?
アバター
でんぺん 2018/4/22 23:24 ◆HfSy5ayxtyTa
みんなの言っていることは同じような事です。セパレート文字は自分で決めれますが文字列を区切るための文字なので区切りとして以外に使われない文字に決める必要があります。

変数、セパレート、変数、セパレートって感じになるというのはその通りですね。複数の文字列を一つの文字列にまとめて、あとで分けるためには分けるための目印になる文字で区切らないとって感じです。
アバター
しょうご 2018/4/22 23:26 ◆tpp2zBc4h8pI
変数を探すことはわかりましたが、実際に追加や取り出しを行うにはどのようにすれば良いのでしょうか。
アバター
ツララ 2018/4/23 3:30 ◆ArUdBYOYME1V
PRG系命令でDATA文に置き換えちゃえばいいんじゃないんです?
区切り文字って言っても引数を複数使う命令や関数でしょうごさんもコンマ(「,」←これ)を普通に使われてるでしょうし。
連結する文字列の個数が予め決まってるなら、FOR文でループさせてREAD命令で読み込んで
カウンタ変数が幾つの時なのかをIF文で分岐させて読み込んだデータを適用するかで取り出せるでしょうし
追加の場合は、まとめるための入れ物となる文字列変数に
連結の最後になる文字列以外には末尾に「,」をチョイ足しして繋げて行く感じで。

あと、保存したい各文字列の長さを一律に揃えておけば、別に区切り文字なんて使わなくても
MID$()やLEFT$()やRIGHT$()やSUBST$()関数で連結した文字列の何番目を取り出したり置き換えたりとか出来ますけど。
追加というか文字列の連結は普通に「+」演算子で出来ますよん。
連結の式を書く時は項の順番に注意が要りますけど。
アバター
Villit 2018/4/23 4:23 ◆vHS9PZuQvtOx
例としてA$,B$,C$をDATA$に保存してみましょう。
DATA$=A$+","+B$+","+C$
これだけでOKです。

取り出しの方は少々複雑です。
FOR M=0 TO LEN(DATA$)-1
M$=SHIFT(DATA$)
IF M$=="," THEN GOSUB @READ ELSE X$=X$+M$
NEXT

@READ
IF CNT==0 THEN A$=X$
IF CNT==1 THEN B$=X$
IF CNT==2 THEN C$=X$
INC CNT:X$=""
RETURN

ちょっと書き方は雑ですがだいたいこんな感じ。
アバター
Villit 2018/4/23 4:27 ◆vHS9PZuQvtOx
取り出し部分の構造ですが、

まずはDATA$の内容を頭から1文字ずつ取り出します。
取り出した文字がコンマ(,)じゃない場合は、その文字をX$に溜めていき、
コンマである場合はA$にX$を入れて一区切り。
X$に溜めた文字をリセットしてB$の読み込みに移る……(これをDATA$の文字数分ループ)

って感じのプログラムになってます。
(もっと効率的なやり方はあると思いますがね)
アバター
はる 2018/4/23 5:37 ◆75Vh4SY8TdKS
ツララさん

命令や関数に","を使ったらエラーになりますよ。
また、"+"もエラーになります。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -