投稿日 | : 2002/08/29(Thu) 17:41 |
投稿者 | : A221 |
Eメール | : |
URL | : |
タイトル | : Re^2: テキストファイルの読み込み |
自己レス。ファイルを読みながらソートするのがマージソートだったと
記憶違いをしていました。
#また無知を曝してしまった。
テキストへの読込を作ってみました。
#クラスを使っているのは最近私がクラスにかぶれているからです。(><)
'------------------------フォームに貼る
Option Explicit
Private Sub Form_Load()
Dim test As New Dataloading
test.Loading
MsgBox CStr(test.DataCount) + CStr(test.MostOldData)
End Sub
'------------------------クラスモジュール「Dataloading」を作って貼る
Option Explicit
Private Const filename = "C:\test.csv"
Private Count As Long
Private Type Loaddata
DDate As Date
Data(1 To 3) As Long
End Type
Private LoadingData() As Loaddata
Public Sub Loading()
Dim fnum As Long
Dim DefaultDate As Date
Dim tmp As String
fnum = FreeFile
Count = 0
ReDim LoadingData(Count)
Open filename For Input As fnum
Do Until EOF(fnum)
With LoadingData(Count)
Input #fnum, tmp, .Data(1), .Data(2), .Data(3)
.DDate = CDate(tmp)
Count = Count + 1
End With
ReDim Preserve LoadingData(Count)
Loop
Close fnum
Call SortData(0, Count)
End Sub
Private Sub SortData(l As Long, r As Long)
Dim i As Long
Dim j As Long
Dim x As Date
Dim Swap As Loaddata
x = LoadingData((l + r) \ 2).DDate
i = l
j = r
Do
Do While LoadingData(i).DDate < x
i = i + 1
Loop
Do While LoadingData(j).DDate > x
j = j - 1
Loop
If i >= j Then Exit Do
Swap = LoadingData(i)
LoadingData(i) = LoadingData(j)
LoadingData(j) = Swap
i = i + 1
j = j - 1
Loop
If (l < i - 1) Then SortData l, i - 1
If (r > j + 1) Then SortData j + 1, r
End Sub
Public Property Get DataCount()
DataCount = Count
End Property
Public Property Get MostOldData()
MostOldData = LoadingData(1).DDate
End Property