tagCANDY CGI VBレスキュー(花ちゃん) - CSVファイル内のデータから重複しないデータを高速で取得(VB6.0) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
CSVファイル内のデータから重複しないデータを高速で取得(VB6.0)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

CSVファイル内のデータから重複しないデータを高速で取得(VB6.0) [No.180の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.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件
作成してテストした結果の実行画像(画像をクリックすると元のサイズで表示されます)
他の方法と処理速度を比較しようと思ったのですが、その必要も無いほど早いのでやめました。
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ