'Split version 02 'by ptitjoz ≫ Apr 09, 2018 14:18 'https://www.freebasic.net/forum/viewtopic.php?p=245695#p245695 '================================================== ' Split02 Sub '================================================== Sub Split02(ByVal s As String,delimit As String,Outcome() As String) ReDim Outcome(0) Dim As String t=s '作業文字列 Dim As Integer nb=0 '要素の数 Dim As Integer p,i ' 配列のサイズを決定する要素の数を見つける For i=1 To Len(s) If Mid(s,i,1)=delimit Then nb=nb+1 Next '配列のサイジング nb=nb+1 ' 最後の要素に 1 を加算 ReDim Outcome(1 To nb) '配列に記入 For i=1 To nb p=InStr(t,delimit) Outcome(i)= Mid(t,1,p-1) t=Right(t,Len(t)-p) Next End Sub '================================================== ' 活用例 '================================================== Dim As String s = "aaaa bbbbbb ccccc ddddddd eeeeee" '切り取る文字列 Dim As String deliminator ReDim As String r() deliminator =" " '区切り文字 Tab の例 Print Asc(deliminator) 'Tab の文字コードは9 Print Split02(s,deliminator,r()) For n As Long=LBound(r) To UBound(r) Print n,r(n),Len(r(n)) Next Sleep
'Split_dodicat 'by dodicat ≫ Apr 09, 2018 15:14 'https://www.freebasic.net/forum/viewtopic.php?p=245701#p245701 '================================================== ' string_split Sub '================================================== Sub string_split(ByVal s As String,chars As String,result() As String) ReDim result(0) Dim As String var1,var2 Dim As Long pst,LC=Len(chars) #Macro split(stri) pst=InStr(stri,chars) var1="":var2="" If pst<>0 Then var1=Mid(stri,1,pst-1) var2=Mid(stri,pst+LC) Else var1=stri End If If Len(var1) Then ReDim Preserve result(1 To UBound(result)+1) result(UBound(result))=var1 End If #EndMacro Do split(s):s=var2 Loop Until var2="" End Sub '================================================== ' 活用例 '================================================== Dim As String s="aaaa123456789bbbbbb123456789ccccc123456789ddddddd123456789eeeeee" Dim As String deliminator ReDim As String r() deliminator="123456789" string_split(s,deliminator,r()) For n As Long=LBound(r) To UBound(r) Print n,r(n) Next Sleep