ab.com コミュニティ https://www.activebasic.com/forum/ |
|
Split関数(指定文字で文を分ける) https://www.activebasic.com/forum/viewtopic.php?t=4555 |
ページ 1 / 1 |
作成者: | 水波形 [ 2014年3月14日(金) 03:19 ] |
記事の件名: | Split関数(指定文字で文を分ける) |
二番煎じでしたらすいません。 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 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |