トピック
しんしん manashi3

文字列に文字を挿入

文字列に文字を挿入するプログラムを作ったのですが、もう少し効率化できそうな気がするので皆さんの意見が欲しいです。何か案があったら教えてください。
2そうだね
プレイ済み
返信[1]
親投稿
文字列を配列扱いでなんとやら…
4そうだね
プレイ済み
返信[2]
親投稿
たぶんMID$は PUSHTXT$+TEXT$[PUSHNUM-1] で出来そうです。 RIGHT$()とLEFT$()を強引に使うとか。(無茶)
1そうだね
プレイ済み
返信[3]
親投稿
ツララ LongIceSword
置き換えじゃなくて挿入なら、しょぼーんさんのRIGHT$()とLEFT$()を使う方法が一番簡単なんじゃないです? TEXT$="ABCEF" PUSH_TEXT$="D" PUSH_NUM=3 ?LEFT$(TEXT$,PUSH_NUM)+PUSH_TEXT$+RIGHT$(TEXT$,LEN(TEXT$)-PUSH_NUM) こんな感じで。
2そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
プチコン3号の文字列は内部では配列で処理されているため実は難しいことをせずにその書いている通りのことが簡単にできます。 A$="ABCEF"の場合は、A$[3]="D"+A$[3]とするだけです。 これでA$の3番目(0が起点なので4文字目)の前に"D"という1文字を追加できます。
3そうだね
プレイ済み
返信[5]
親投稿
ツララ LongIceSword
おちゃめさんの方法ってUNDOが出来ないデメリットありますけど便利ですね。 途中削除のSUBST$()の対の途中挿入でINST$()みたいな自作関数を作ったらいいかも。 多次元の文字列配列でも問題無く同じ様なこと出来るので、遺伝的プログラムに応用出来そうですね。
1そうだね
プレイ済み
返信[6]
親投稿
おおみの Omi-no-mino-398
SUBST$() の文字数を0にすると開始位置のところに挿入されます。 SUBST$("ABCEF",3,0,"D") →結果 ABCDEF SUBST$("ABCEF",3,0,"D777") →結果 ABCD777EF
3そうだね
プレイ済み
返信[7]
親投稿
おおみの Omi-no-mino-398
文字列を削除も同じようにできます。 SUBST$("ABCDEFGHIJ",3,3,"") →結果 ABCGHIJ
2そうだね
プレイ済み
返信[8]
親投稿
しんしん manashi3
皆さんありがとうございます! 皆さんの投稿を基に新しくプログラムを組んでみましたが、新たな問題です。 おちゃめさんとツララさんの投稿を参考に挿入するプログラムを関数化したのですが、Type mismatchエラーでうまく動作しませんでした。関数だと配列扱いできない仕様?
0そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
関数の引数に使っている文字列を配列のように使用する場合は読み出しはできますが書き込みができないため一旦別の変数に代入して使ってください。 DEF INST$(TXT$,PTXT$,NUM)  VAR T$=TXT$  T$[NUM]=PTXT$+T$[NUM}  RETURN T$ END とすれば問題なく使えます。 ちなみにT$[NUM]=""とすれば1文字削除ができます。(わざわざ1文字削除の関数を作らなくても短いためそのまま記述してもいいくらいだけど) あと"ABCEF"[4]のように変数ではなく定数でも配列的な使用は可能(当然、ながら読み出し専用)
1そうだね
プレイ済み
返信[10]
親投稿
しんしん manashi3
出来ました! 一応範囲外の数字は対策済です。
0そうだね
プレイ済み
返信[11]
親投稿
しんしん manashi3
閉め忘れていたので閉じます。
0そうだね
プレイ済み