tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
CSVファイル内のデータから重複しないデータを高速で取得(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2008/03/11 21:21
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル入出力][][]                                              *
* キーワード:CSVファイル,テキストファイル,重複,抽出,                 *
***********************************************************************************
タイトル : CSVから重複しないデータの抽出
記事No : 11305
投稿日 : 2008/02/01(Fri) 16:22
元質問 : さるうっち  

○○県,○○町,13-132,○田○子,090-1111-1111
△○県,■○市,4312,○嶋○美,090-2222-5555
○○県,○○町,525,○山○子,090-2222-5555
○□県,○△町,332,○谷○夫,090-3333-4444


という住所データ(1000行)があります。
このデータから、重複しない住所(都道府県、市町村)
の組み合わせを抽出したいのです。

-----------------------------------------------------------------------------------
記事No : 11306
投稿日 : 2008/02/01(Fri) 16:55
回答者 : YK  
-----------------------------------------------------------------------------------

Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private lngStartTime As Long

Private Sub Command1_Click()
   List1.Clear
   fTimeCount
   Dim SD      As Object
   Dim strFnm  As String
   Dim intFno  As Integer
   Dim strBuf  As String
   Dim varD    As Variant
   Dim i       As Long
  
   strFnm = "c:\TEST.csv"
   intFno = FreeFile
  
   Set SD = CreateObject("Scripting.Dictionary")
  
   Open strFnm For Input As #intFno
   Do While Not EOF(intFno)
      Line Input #intFno, strBuf
      varD = Split(strBuf, ",")
      SD(varD(0) & "," & varD(1)) = Empty
   Loop
   Close #intFno
  
   varD = SD.keys
   List1.Visible = False
   For i = 0 To UBound(varD)
      List1.AddItem varD(i)
   Next
   List1.Visible = True
   MsgBox fTimeCount
End Sub

'1行全体での重複チェックの場合
Private Sub Command2_Click()
   List1.Clear
   fTimeCount
  
   Dim SD      As Object
   Dim strFnm  As String
   Dim intFno  As Integer
   Dim strBuf  As String
   Dim varD    As Variant
   Dim i       As Long
  
   strFnm = "c:\TEST.csv"
   intFno = FreeFile
  
   Set SD = CreateObject("Scripting.Dictionary")
  
   Open strFnm For Input As #intFno
   Do While Not EOF(intFno)
      Line Input #intFno, strBuf
'      varD = Split(strBuf, ",")
      SD(strBuf) = Empty
   Loop
   Close #intFno
  
   varD = SD.keys
   List1.Visible = False
   For i = 0 To UBound(varD)
      List1.AddItem varD(i)
   Next
   List1.Visible = True
   MsgBox fTimeCount
End Sub

Private Function fTimeCount() As String
    Static lngST As Long
    If lngST = 0& Then
        lngST = timeGetTime
    Else
        fTimeCount = "経過時間=" & Str$((timeGetTime - lngST) / 1000) & " 秒です"
        lngST = 0&
    End If
End Function

Scripting.Dictionary オブジェクト については下記に解りやすく書いてあります。
(Tatsuya's Home Page 配列操作 Dictionaryオブジェクト編)
http://www.red.oit-net.jp/tatsuya/vb/Dictionary.htm

○○県,○○町,13-132,○田○子,090-1111-1111 のデータを2000件内同じデータを40件
作成してテストした結果の実行画像(画像をクリックすると元のサイズで表示されます)
他の方法と処理速度を比較しようと思ったのですが、その必要も無いほど早いのでやめました。



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