tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
ダブルクォーテーションを含む文字列の読込表示_1(VB6.0) ( No.1 )  [親スレッドへ]
日時: 2011/04/05 11:17
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル入出力][文字列処理][]                                      *
* キーワード:CSVファイル,ファイルの読み込み,,,,                                  *
***********************************************************************************

--------------------------------------------------------------------------------------
No.1982 Re:ダブルクォーテーションを含む文字列  投稿者:ゆう(U) [2001/03/29(木)12:16分]
--------------------------------------------------------------------------------------

完全に解決されているみたいですが・・・

Split関数(VB6.0)が無くともOKなコードです・・・
※VB4.0/VB5.0でも動作するはずです
 VB4.0では動作確認してませんが・・・

myCharを""とすると、Split的に動作します。

'==========================================================
'文字列をセパレータで区切り配列にする関数 (Split代用関数:拡張版)
'==========================================================
' result = fSplit2(myString, [mySeparator], [myChar], [myCompare])
' 引数 myString   :元の文字列
'    mySeparator:区切り文字(省略可:,)
'    myChr      :文字列引用符(省略可:")
'    myCompare  :比較モード(省略可:バイナリ モード)
' 戻値 result     :切出した文字列(バリアント配列)
'               :エラー時(Empty)
'----------------------------------------------------------
'サンプル)
'Dim varArray As Variant
'Dim varTemp As Variant
'Dim strTemp As String
'
'strTemp = "123,456,""123,456"",""ABC"""
'varArray = fSplit2(strTemp, ",") ' 実際には「,」は半角です
'
'Debug.Print UBound(varArray) - LBound(varArray) + 1
'For Each varTemp In varArray
'  Debug.Print varTemp
'Next varTemp
'' 通常の For〜Next でもOK
'' Dim i As Long
'' For i = LBound(varArray) To UBound(varArray)
''   Debug.Print varArray(i)
'' Next i
'結果)
' 4        ←区切られた項目数
'123       ←第1項目
'456       ←第2項目
'"1234,567"←第3項目
'"ABC"     ←第4項目
'注意)
'文字列引用符と区切り文字の関係に注意して下さい。
'"123,456,""ABC,EFG""H,IJK"
'                    ^こんなのに注意ってこと(普通はないけど)
'----------------------------------------------------------
Public Function fSplit2(ByRef myString As String, _
                        Optional ByRef mySeparator _
                        As String = ",", _
                        Optional ByVal myChar _
                        As String = """", _
                        Optional ByVal myCompare _
                        As VbCompareMethod = vbBinaryCompare) As Variant
  Dim strArray() As String
  Dim lngLength As Long
  Dim lngArrayCount As Long
  Dim i As Long, j As Long, k As Long

  On Error GoTo FUNCTION_ERR

  j = 1&
  lngLength = Len(mySeparator)
  i = InStr(j, myString, mySeparator, myCompare)
  k = InStr(j, myString, myChar, myCompare)
  Do While i > 0&
    If k = 0 Then
      k = Len(myString)
    End If
    If k < i - 1& Then
      k = InStr(k + 1&, myString, myChar, myCompare)
      i = InStr(k + 1&, myString, mySeparator, myCompare)
    Else
      ReDim Preserve strArray(lngArrayCount)
      strArray(lngArrayCount) = Mid$(myString, j, i - j)
      lngArrayCount = lngArrayCount + 1&
      j = i + lngLength
      i = InStr(j, myString, mySeparator, myCompare)
      k = InStr(j, myString, myChar, myCompare)
    End If
  Loop
  ReDim Preserve strArray(lngArrayCount)
  strArray(lngArrayCount) = Mid$(myString, j, Len(myString) - j + 1&)

  fSplit2 = strArray
  Exit Function

FUNCTION_ERR:
  'エラー発生
  'Emptyのまま(TypeName(戻り値)="Empty"で判定可能)
End Function


標準モジュールに貼り付けておけば・・・イミディエイトウインドウで
動作確認が出来ます。

? fSplit2("123,456,""ABC,EFG""H,IJK", ",", "")(2)
普通のSplit的動作

? fSplit2("123,456,""ABC,EFG""H"",IJK", ",")(2)
Split関数拡張版




 [スレッド一覧へ] [親スレッドへ]