HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1103
Recompressed文字列型変数の指定行〜指定行までを別の変数に代入する方法4解決


Recompressed

リンク

2013/11/3(Sun) 16:43:23|NO.57966

文字列型変数の指定行〜指定行までを別の変数に代入することってできますか?

ただ単に改行文を代入するだけなら{"〜"}でできますが、
文字列型変数から指定行〜指定行を取り出すやり方が分かりません。

方法があれば教えてください。よろしくお願いします。



この記事に返信する


KA

リンク

2013/11/3(Sun) 17:20:17|NO.57967

文字列型変数を文字列型配列変数(単次元)に代入



FunnyMaker

リンク

2013/11/3(Sun) 18:08:26|NO.57970

モジュールを作ってみました。
取り出した文字列を別の変数に代入する作業までは含めていませんが、取り出しさえ
できれば勝負ありなので、細かいところは都合良く変えてくださって結構です。

注意 : 不正なパラメータに対するチェックを行っていません。(速度重視の為)
   不正なパラメータを処理すると無限ループになることもあります。
   パラメータには気をつけてください。
   (※安全機構が欲しい場合は御自身で追加してください。)

良かったら参考にしてやってください。


#module M_GetCharLines #defcfunc GetCharLines str str1,int i1,int i2 ;[書式] ; buf = GetCharLines(文字列(or変数名),p1,p2) ; ; 文字列 : 取り出し元の文字列(変数名も可) ; p1,p2 : 取り出し開始行番号,終了行番号 ; (※行番号は1から数える) str2 = str1 idx_start = 0 : repeat i1-1 : idx_start + instr(str2,idx_start,"\n") + 2 : loop ;取り出し始めのインデックスを特定 idx_end = idx_start num_rep = i2-i1 + 1 repeat num_rep ;取り出し終了インデックスを特定 k1 = instr(str2,idx_end,"\n") if k1 = -1 : idx_end = strlen(str2) : break ;最終行考慮 idx_end + k1 if cnt < num_rep - 1 : idx_end + 2 loop return strmid(str2,idx_start,idx_end-idx_start) #global ;++++++++++ sample ++++++++++ mes GetCharLines("ABC\nDEF\nGHI\nJKL",2,3)



Recompressed

リンク

2013/11/3(Sun) 19:34:49|NO.57971

ありがとうございます!モジュールを作ってくださるとは...
大変参考になりました!



fortunehill

リンク

2013/11/3(Sun) 23:19:54|NO.57976

/*蛇足(解決していますが切りだし方2点とarray:notesel"\n"なら切りだせる)*/

mes "0=ABC 1=DEF 2=GHI 3=JKL" mes xxx("ABC\nDEF\nGHI\nJKL",0,0,'\n') mes xxx("ABC\nDEF\nGHI\nJKL",2,3,'\n') mes xxx("ABC\nDEF\nGHI\nJKL",3,2,'\n') repeat zzz("ABC\nDEF\nGHI\nJKL",2,3,'\n',xx) mes strf("%d %s",cnt,xx(cnt)) loop stop #defcfunc xxx str p1,int p2,int p3,int p4,local cc,local ii cc = p1 :poke cc(1),0,p4 :ii = 0,0 repeat :await getstr cc(2),cc,ii,p4 if (strsize == 0) {break} if (ii(1) >= p2) {cc(3)+=cc(2)+cc(1) :if (ii(1) >= p3) {break}} ii(1)++ :ii+=strsize+1 loop return cc(3) #defcfunc zzz str p1,int p2,int p3,int p4,array p5,local ss,local rr,local ii rr = "","" :poke rr,0,p4 :ss = p1 :split ss,rr,ss repeat :await if (cnt >= p2) {p5(ii) = ss(cnt)+rr:ii++ :if (cnt >= p3) {break}} loop return ii



ONION software Copyright 1997-2023(c) All rights reserved.