文字列

文字列の作成と操作です。

注釈

Ring の文字列処理用の組み込み関数は ASCII 専用であり、そのままでマルチバイト文字列 (UTF-8, Shift JIS, JIS, EUC-JP など) の処理には使えません。 RingQt のラッパークラスを作成あるいは、リスト形式への変換、または専用関数を作成してください (残念ながら仕様です)。

文字列リテラル

文法:

cStr = "This is a string"
cStr2 = 'Another string'
cStr3 = :JustAnotherString
cStr4 = `Yet "another" 'string' ! `

文字列の長さを取得するには

len() 関数は文字列の長さ (文字列内の文字数) を取得します。

文法:

len(string) ---> 文字列の長さ

引数:

名称

説明

string

長さを得たい文字列

用例:

cStr = "How are you?"
see cStr + nl
see "String size : " + len(cStr) + nl

文字のつづりを変換するには

文法:

lower(string) ---> 文字列を小文字へ変換します。
upper(string) ---> 文字列を大文字へ変換します。

用例:

cStr = "Welcome To The Ring Programming Language"
see cStr + nl + upper(cStr) + nl + lower(cStr)

文字列にある文字へのアクセス

文字インデックスで文字列内にある文字へアクセスします。

文法:

string[index] ---> 文字列にある文字を取得します。
string[index] = letter  # 文字列にある文字へ別の文字列を配置します。

用例:

# ユーザ名を一文字ずつ表示します (一文字ごとに改行されます)。

See "Hello, Enter your name : " give cName
for x = 1 to len(cName)
        see nl + cName[x]
next

for in で文字列の文字を取得します。

用例:

# ユーザ名を一文字ずつ表示します (一文字ごとに改行されます)。

See "Hello, Enter your name : " give cName
for x in cName
        see nl + x
next

文字列にある文字を変更します。

用例:

# 最初の一文字目を大文字へ変換します。

See "Enter your name : " give cName
cName[1] = upper(cName[1])
see "Hello " + cName

Left() 関数

Left() 関数は文字列から指定文字数の文字を取得します。

開始位置は 1 です。

文法:

Left(string, count)

引数:

名称

説明

string

処理をする文字列

count

開始位置から得たい文字数

用例:

see left("Hello World!",5) # Hello の表示

Right() 関数は文字列から指定文字数の文字を取得します。

始点は最後の文字の右側からです。

文法:

Right(string, count)

用例:

see Right("Hello World!",6) # World! を表示

Trim() 関数

Trim() 関数は文字列の先頭と最後から半角空白文字 (0x20H) をすべて削除します。

文法:

trim(string)

用例:

cMsg = "     Welcome      "
see trim(cMsg)                  # Welcome を表示

タブ文字 (0x1BH) を削除したい場合は SubStr() 関数を併用します:

cMsg = "     Welcome      "
see trim(substr(cMsg, tab, ' '))        # Welcome を表示

Copy() 関数

copy() 関数は文字列を一回以上繰り返してコピーします。

文法:

copy(string, nCount)
        ---> 文字列を nCount 回繰り返します。

用例:

see copy("***hello***",3) # ***hello******hello******hello*** を表示

Lines() 関数

Lines() は文字列にある行数を取得します。

文法:

lines(string) ---> 文字列内の行数

用例:

cStr = "Hello
How are you?
are you fine?"
see lines(cStr)         # 3 の表示

Substr() 関数

Substr() 関数は文字列内にある部分文字列を処理します。 また、このようなことができます。

  • 部分文字列の検索

  • 指定位置から末尾までの部分文字列の取得

  • 指定位置から文字の字数を取得

  • 部分文字列を別の部分文字列へ置換

部分文字列の検索

文法:

substr(string, substring)
        ---> 文字列内の部分文字列における始点位置

用例:

cStr = "Welcome to the Ring programming language"
see substr(cStr,"Ring")         # 16 の表示

指定位置から末尾までの部分文字列を取得するには

文法:

substr(string, position)
        ---> 指定位置から末尾までの部分文字列を取得します。

用例:

cStr = "Welcome to the Ring programming language"
nPos = substr(cStr,"Ring")      # nPos = 16
see substr(cStr,nPos)           # Ring programming language を表示

文字の位置を数値で取得するには

文法:

substr(string, position, count)
        ---> 文字の位置を取得します。

用例:

cStr = "Welcome to the Ring programming language"
nPos = substr(cStr,"Ring")      # nPos = 16
see substr(cStr,nPos,4)         # Ring を表示

部分文字列を別の部分文字列へ置換するには

文法:

substr(string, substring, newsubstring)
        ---> 置換文字列 (英数大小文字を区別する)

substr(string, substring, newsubstring, 1)
        ---> 置換文字列 (英数大小文字を区別しない)

用例:

cStr = "Welcome to the New programming language"
see substr(cStr,"New","Ring")   + nl # Welcome to the Ring programming language の表示
see substr(cStr,"new","Ring",1) + nl # Welcome to the Ring programming language の表示

strcmp() 関数

strcmp() 関数は文字列同士を比較します。

文法:

strcmp(cString1,cString2) --->  = 0 if cString1 = cString2
                                < 0 if cString1 < cString2
                                > 0 if cString1 > cString2

用例:

see strcmp("hello","hello") + nl +
    strcmp("abc","bcd") + nl +
    strcmp("bcd","abc") + nl

実行結果:

0
-1
1

str2list() と list2str() 関数

str2list() 関数は文字列にある行をリストへ変換します。 また list2str() 関数はリストを文字列へ変換します。

文法:

str2list(string) ---> 文字列の行からリストの項目への変換結果 (改行で分割)
list2str(list)   ---> リストの項目から文字列への変換結果 (リストの全項目を連結)

用例:

/* 実行結果:
** Items : 4
** Item : Hello
** Item : How are you ?
** Item : are you fine ?
** Item : ok
** list2Str result = Hello
** How are you ?
** are you fine ?
** ok
** Done
*/

mystr = "Hello
How are you ?
are you fine ?
ok"

mylist = str2list(mystr)
see "Items : " + len(mylist) + nl

for x in mylist
        see "Item : " + x + nl
next

newstr = list2str(mylist)
see "list2Str result = " + newstr

if mystr = newstr
        see nl + "Done"
else
        see nl + "Error!"
ok

バイナリ文字の統合

Ring 1.0 からバイナリ文字列の作成と操作を行えます。

Ring 1.8 より文字列から個別に文字を取得したり、 '+' 演算子でまとめて統合できます。

用例:

cStr = "Welcome"
? cstr[1] + cstr[2] + cStr[5]
v = cstr[1] + cstr[2] + cStr[5]
? v
? len(v)
c1 = cStr[1]
? c1
aList = [1,2,3]
cStr = ""
for item in aList
        cStr += int2bytes(item)
next
? "All String"
? len(cStr)
? "First Part"
n1 = cStr[1] + cStr[2] + cStr[3] + cStr[4]
? len(n1)
? "Second Part"
n2 = cStr[5] + cStr[6] + cStr[7] + cStr[8]
? len(n2)
? "Third Part"
n3 = cStr[9] + cStr[10] + cStr[11] + cStr[12]
? len(n3)
? "All String"
cString = cStr[1] + cStr[2] + cStr[3] + cStr[4] +
          cStr[5] + cStr[6] + cStr[7] + cStr[8] +
          cStr[9] + cStr[10] + cStr[11] + cStr[12]
? len(cString)
? ascii(cStr[1])
? len(cStr[2])

実行結果:

Weo
Weo
3
W
All String
12
First Part
4
Second Part
4
Third Part
4
All String
12
1
1