VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/04/16(Wed) 00:21
投稿者mitu
Eメール
URL
タイトルRe^3: RichTextBox使用のファイル比較

魔界の仮面弁士さん、花ちゃんさん、
返信ありがとうございます。
そして、試して頂きまして、嬉しい限りです。

> 実に10分以上もの時間がかかってしまいます。
そんなにかかってしまうんですね。
実は、RichTextBoxではなく、MsHFlexGridを使って作成しました。

> それでしたらMSFlexGridの方が早そうですね
> 読込み表示と比較色づけで2分もかからないようです。
>
> 同様のファイルで試してみたら
> 読込表示に   26秒 (2ファイル読込)
> 比較色付けに  8.7 秒
>
> Pen4 1.7GHz WinXP VB6.0

MsHFlexGridで作成したところ、
ファイルのドラッグ&ドロップでGridに表示  20秒   (1ファイル)
文字列データ取得、比較                    25秒   (2ファイル)
色づけ                                    1分30秒(2ファイル)

比較開始ボタンを押してから、合計で約2分30秒程かかってしまいました。
Celeron 750Hz Win2000 VB6.0
です。

Grid表示は以下のようにやっています。

Public Sub Set_CSV_In_Grid(strText As String, maxRow As Long, grd As MSHFlexGrid)
    Dim oneTxt()  As String
    Dim colC()    As Long
    Dim dumCell() As String
    Dim maxCol    As Long
    Dim putFixed  As String
    Dim pp        As Long
    Dim i         As Integer
    Dim j         As Integer
    
    ReDim oneTxt(maxRow - 1)
    ReDim colC(maxRow - 1)
    '各行の文字列取得
    oneTxt = Split(strText, vbCrLf)
    
    For i = 0 To maxRow - 1
        'カラム数取得
        colC(i) = Get_Column_Count(oneTxt(i))
        '最大カラム数
        If maxCol < colC(i) Then maxCol = colC(i)
    Next i
    '再割り当て
    ReDim dumCell(maxCol - 1)
    
    With grd
        .Clear                      'クリア
        .Rows = maxRow + 1          '行数
        .Cols = maxCol + 1          '列数
      
        For i = 1 To maxRow
            '固定行
            .TextMatrix(i, 0) = i
            If oneTxt(i - 1) <> "" Then
                '各セルの値取得
                dumCell = Split(oneTxt(i - 1), ",", colC(i - 1))
                '列最大数分繰返し
                For j = 1 To colC(i - 1)
                    '各セルの値 PUT
                    .TextMatrix(i, j) = Trim$(dumCell(j - 1))
                Next j
            End If
        Next i
    End With
End Sub

データ取得は
With grd
    For i = 0 To maxRow - 1
        For j = 0 To maxCol - 1
            strText(i, j) = .TextMatrix(i + 1, j + 1)
        Next j
    Next i
End With

比較は
For i = 0 To maxRow - 1
    For j = 0 To maxCol - 1
        If (strTxt1(i, j) <> strTxt2(i, j)) Then
            DrawF1(i, j) = 1
            DrawF2(i, j) = 1
        End If
    Next j
Next i                    
です。データ取得と比較は別関数です。

色付けは、
With grd
    For i = 0 To xRow - 1
        For j = 0 To xCol - 1
            If (DF(i, j) = 1) Then
                .Row = i + 1
                .Col = j + 1
                .CellBackColor = vbRed
                .CellForeColor = vbWhite
            End If
        Next j
    Next i
End With
これを2回呼んでいます。

長くなってしまいましたが、
こうすれば早くなるなどありましたらお願いします。

宜しくお願いいたします。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -