ActiveBasic(Ver.4.24.00)にSplit関数がなかったので作ってみました。
よく分からなかったので、配列の最後に
Ex"\0"
を突っ込んでおきました。
これが来たらデータ終了です。
■仕様説明
(①戻り値) = Split(②引数,③引数)
①String型のポインタ(*String)が返ります
②分解したい文章データを指定(String型)
③区切り文字を指定(String型)
①で返ってきたデータが配列になっているので、後はそれをお使いください。
例は下。
コード: 全て選択
/* Split関数 */
Function Split(Text As String,Delimiter As String) As *String
Dim DataNum As Long
Dim StringData As *String
Dim re As Long
Dim re_b As Long
Dim s As String
DataNum = 0
StringData = NULL
Do
re = re + 1
re_b = re
'区切り文字の検索
re = InStr(re_b, Text, Delimiter)
'区切り文字までの抜き出し
If re <> 0 Then
s = Mid$(Text,re_b,re-re_b)
Else
s = Mid$(Text,re_b)
End If
'動的配列に格納
If StringData = NULL Then
StringData = malloc(SizeOf(String) * 1)
Else
StringData = realloc(StringData,SizeOf(String) * (DataNum+1))
End If
StringData[DataNum] = s
DataNum = DataNum + 1
Loop Until re = 0
'末端にNULL文字を入れる
StringData = realloc(StringData,SizeOf(String) * (DataNum))
StringData[DataNum] = Ex"\0"
'値を返す
Split = StringData
End Function
一応サンプルも。
全コピペで動きます。
[新規作成] > [BASICプログラム]
コード: 全て選択
Dim n As Long
Dim Text As *String
Text = Split("aaa,bbb,ccc,ddd",",")
Do
MessageBox(0,Text[n],"Text["+Str$(n)+"]",0)
n = n + 1
If Text[n] = Ex"\0" Then
Exit Do
End If
Loop
/* Split関数 */
Function Split(Text As String,Delimiter As String) As *String
Dim DataNum As Long
Dim StringData As *String
Dim re As Long
Dim re_b As Long
Dim s As String
DataNum = 0
StringData = NULL
Do
re = re + 1
re_b = re
'区切り文字の検索
re = InStr(re_b, Text, Delimiter)
'区切り文字までの抜き出し
If re <> 0 Then
s = Mid$(Text,re_b,re-re_b)
Else
s = Mid$(Text,re_b)
End If
'動的配列に格納
If StringData = NULL Then
StringData = malloc(SizeOf(String) * 1)
Else
StringData = realloc(StringData,SizeOf(String) * (DataNum+1))
End If
StringData[DataNum] = s
DataNum = DataNum + 1
Loop Until re = 0
'末端にNULL文字を入れる
StringData = realloc(StringData,SizeOf(String) * (DataNum))
StringData[DataNum] = Ex"\0"
'値を返す
Split = StringData
End Function
後、コードパッドなんかにも上げてみたり。
インデントとかしっかりしてるので
http://codepad.org/ZvSEJc9L