投稿日 | : 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回呼んでいます。
長くなってしまいましたが、
こうすれば早くなるなどありましたらお願いします。
宜しくお願いいたします。