ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年11月21日(火) 09:27

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 1 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2014年3月14日(金) 03:19 
オフライン

登録日時: 2009年3月29日(日) 15:45
記事: 106
二番煎じでしたらすいません。
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

_________________
↓個人的ソフト置き場
http://www.software.jpn.org/
↓萌えゲー製作とかしていたい
http://www.holygate.jpn.org/


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 1 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke