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

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

元質問者の内容
----------------------------------------------------------------
VB6.0、SP3、OSはWin2000という環境で開発をしているのですが、ダブルクォーテーションを含む文字列をうまく読み込むことができません。
改行を含むカンマ区切りのテキスト(CSV?)ファイルを、順次読み込んでいく処理を行いたいのですが、ひとつのデータ中に「"」が含まれていると、そこで切り分けに不都合が生じてしまいます。
----------------------------------------------------------------

---------------------------------------------------------------------------------------
No.1968 RE:ダブルクォーテーションを含む文字列  投稿者:gtk [2001/03/26(月)15:25分]
---------------------------------------------------------------------------------------

プログラムの説明
まず、フォームにCommand1(コマンドボタン)、List1/List2(リストボックス)を配置してください
GetData1の取得結果をList1に、GetData2の取得結果をList2に表示します。
@CSVファイルをバイナリモードで開く。
Aファイルのバイト数分バッファを確保。
Bバッファにファイルの内容を全部とりこむ
Cバッファの内容より、文字列に変換
D変換した文字列をSplit関数で切り分け配列に変換。
E変換した配列から、データの中に","カンマが含まれているかを調べ、調整してGetData1配列とGetData2配列に振り分ける

なお、出力結果の文字列はダブルクォーテーションでくくられておりますので、変換するなり削除するなりしてください。
また、リストボックスは改行はしません。改行部分は"・・"で表示されます。
テキストボックスなどで表示すればちゃんと改行されて表示されます。

'---------------------------------------------------------
'Command1のクリックイベント
'---------------------------------------------------------
Private Sub Command1_Click()
Dim Filenumber As Integer
Dim Buffer() As Byte
Dim StrData As String
Dim BaseGetData
Dim GetData1() As String, Getdata2() As String
Dim Cnt As Integer
Dim Cnt2 As Integer
Dim CommaFlg As Boolean

'リストを初期化する
List1.Clear

'空いているファイル番号を取得
Filenumber = FreeFile
'CVSファイルを開く
Open App.Path & "\" & "test.cvs" For Binary As #Filenumber    '<----@
'CVSファイルのデータを取得
'ファイルの大きさ分のバッファを確保
ReDim Buffer(LOF(Filenumber) - 1)    '<----A
'ファイルの中身を全部バッファに取得
Get #Filenumber, , Buffer    '<----B  
'CVSファイルを閉じる
Close #Filenumber
'バッファの内容を文字列に変換
StrData = StrConv(Buffer, vbUnicode)    '<----C
'区切り文字を","(コロン)で文字列を区切り、BaseGetData配列に入れる
BaseGetData = Split(StrData, ",")   '<----D
'GetData1配列及びGetData2配列数を定義する。
ReDim GetData1((UBound(BaseGetData) + 1) / 2 - 1)
ReDim Getdata2((UBound(BaseGetData) + 1) / 2 - 1)

For Cnt = 0 To UBound(BaseGetData)    '------------------(ここからNextまで)E
    '<文字列の最後の文字がダブルクォーテーションじゃない場合>
    If Right(BaseGetData(Cnt), 1) <> """" Then
        'そのデータの中に","(コロン)があるということなので、現在のデータと次のデータを
        '","で結合した文字列をStrDataにセットする
        StrData = BaseGetData(Cnt) & "," & BaseGetData(Cnt + 1)
        'フラグをセットする
        CommaFlg = True
    
    '<文字列の最後がダブルクォーテーションの場合>
    Else
        'そのデータの中に","(コロン)がないので、現在のデータをそのままStrDataに入れる。
        StrData = BaseGetData(Cnt)
        'フラグをクリアする
        CommaFlg = False
    End If
    
    '<GetData1配列、GetData2配列にデータを割り振る>
    If Cnt Mod 2 = 0 Then
        'StrDataの内容をGetData1(Cnt \ 2)に入れる
        GetData1(Cnt \ 2) = StrData
        'GetData1(Cnt \ 2)の内容をリスト1に表示
        List1.AddItem GetData1(Cnt \ 2)
    Else
        'StrDataの内容をGetData2(Cnt \ 2)似入れる
        Getdata2(Cnt \ 2) = StrData
        'GetData2(Cnt \2)の内容をリスト2に表示
        List2.AddItem Getdata2(Cnt \ 2)
    End If
    'データの中に","(コンマ)が入ってる場合は、2つの文字列を結合したので、
    'カウントを1追加する
    If CommaFlg Then Cnt = Cnt + 1
Next
End Sub



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