2017年2月6日月曜日

[UWSC]文字列操作あれこれ [自作関数]

初心者のプログラミング導入のため、簡単な自作関数を作って公開しているブログ。今回は、文字列操作の関数をいくつか作ります。

記事の内容

○文字列操作の関数群
○ちょっと便利な文字列操作

新しい環境ではじめるので、最初は準備。

●なんだ?COPY関数って

UWSCのリファレンスで文字列操作の関数を見てみる。
   R=COPY(文字列,n1,n2)
とすると、文字列のn1番目からn2個取り出す、らしい。

うーん。
文字列操作はやはりBASIC言語の仕様が一番分かりやすいと思うので、自作関数でそっちに翻訳しとこう。
下の関数群を作ります。len()に関しては関数の文字数を少なくしただけだけど。

関数の仕様とソースは、

自作関数mid St=mid("Pokutarou",3,4)
   Stには"kuta"(3文字目から4つ)が代入される
自作関数left St=left("Pokutarou",4)
   Stには"Poku"(左から4つ)が代入される
自作関数right St=right("Pokutarou",5)
   Stには"tarou"(右から5つ)が代入される
自作関数len Intg=len("Pokutarou")
   Intgには9(文字数)が代入される

FUNCTION mid(txt,n1,n2)
    RESULT=COPY(txt,n1,n2)
FEND
FUNCTION left(txt,n)
    RESULT=COPY(txt,1,n)
FEND
FUNCTION right(txt,n)
    RESULT=COPY(txt,LENGTH(txt)-n+1,n)
FEND
FUNCTION len(txt)
    RESULT=LENGTH(txt)
FEND


●便利な関数nthfとnthc

昔ちょこっと使った開発環境にあった関数で便利なものを移植。どういったものかというと、
例えば、「Taro,Jirou,Hanako,Saburou」という文字列があった場合に、
「,」で区切られたフィールドの何番目かを返す関数と、
「,」で区切られたフィールドが何個あるかを返す関数。

スピードは出ないけど結構便利。
関数の仕様とソースは、
自作関数nthf St=nthf("Taro,Jirou,Hanako,Saburou",",",3)
   Stには"Hanako"が代入される(,で区切られたフィールドの3番目のデータ)
自作関数nthc Intg=nthc("Taro:Jirou:Hanako:Saburou",":")
   Intgには4が代入される(:で区切られたフィールドの数)

FUNCTION nthf(txt,sp,n)
    RESULT=nth(txt,sp,n,0)
FEND
FUNCTION nthc(txt,sp)
    RESULT=nth(txt,sp,0,1)
FEND
FUNCTION nth(txt,sp,n,mode)
    j=0
    find=0
    tmp=""
     for i=1 to length(txt)
    moji=COPY(txt,i,1)
      if moji=sp
    j=j+1
    dt=tmp
    tmp=""
      else
    tmp=tmp+moji
      endif
      if mode=0 and j=n
    find=1
    break
      endif
     next
      if find=1
    RESULT=dt
      elseif mode=0 and j=n-1
    RESULT=tmp
      elseif mode=1
    RESULT=j+1
      else
    print "間違った使い方です(nth関数)"
    RESULT="????"
      endif
FEND


“,”で区切られたデータの中に"ほにゃらら"があった場合は何かをせいという命令は以下のように書きます。
for i=1 to nthc(txt,",")
 tmp=nthf(txt,",",i)
 if tmp="ほにゃらら"
  命令
 endif
next


記事の内容

記事の内容は伝わりましたでしょうか。
○文字列操作の関数群
○ちょっと便利な文字列操作


関数群のダウンロードはこちら
func_poku.uwsのコメント欄に呼び出し方が書いてあります。


【関連記事】  [UWSC]タイムアウト関数
[UWSC]文字列操作あれこれ2
UWSCにします




スポンサーリンク

スポンサーリンク



0 件のコメント:

コメントを投稿