投稿日 | : 2002/11/06(Wed) 14:48 |
投稿者 | : A221 |
Eメール | : |
URL | : |
タイトル | : Re^3: 平均値を求める |
> 皆さんお返事ありがとうございます。
> 配列に読み込んでソートをかけるというのは、どの様にすればいいでしょうか?
手元にあったCSV読み込み用のソースを適当に追加したものですが
動作するようです。サンプルにどうぞ。
(但しSplit使用のためVB6.0)
-----------------------------------------------------
Option Explicit
Private Const fname = "c:\test.csv"
Private Type RowMatrix
rowDate As Date
'ここを任意に変える
data(1 To 8) As String
End Type
Private Alldata() As RowMatrix
Private Sub Form_Load()
Dim fnum As Long
Dim flen As Long
Dim tmpstr As String
Dim Linedata As Variant
Dim Coldata As Variant
Dim i As Long
Dim j As Long
fnum = FreeFile
Open fname For Input As #fnum
flen = LOF(fnum) - 2
tmpstr = InputB$(flen, #fnum)
tmpstr = StrConv(tmpstr, vbUnicode)
Linedata = Split(tmpstr, vbCrLf)
ReDim Alldata(1 To UBound(Linedata))
For i = 0 To UBound(Linedata) - 1
Coldata = Split(Linedata(i), ",")
Alldata(i + 1).rowDate = Coldata(0)
For j = 1 To UBound(Coldata) - 1
Alldata(i + 1).data(j) = Coldata(j)
Next j
Next i
Call QuickSort(Alldata, 1, UBound(Alldata))
End Sub
Private Sub QuickSort(tmpdata() As RowMatrix, ByVal leftP As Long, ByVal rightP As Long)
Dim i As Long
Dim j As Long
Dim x As Date
Dim SwapDim As RowMatrix
x = tmpdata((leftP + rightP) \ 2).rowDate
i = leftP
j = rightP
Do
Do Until tmpdata(i).rowDate < x
i = i + 1
Loop
Do Until tmpdata(j).rowDate > x
j = j - 1
Loop
If i <= j Then Exit Do
SwapDim = tmpdata(i)
tmpdata(i) = tmpdata(j)
tmpdata(j) = SwapDim
i = i + 1
j = j - 1
Loop
If (leftP < i - 1) Then Call QuickSort(tmpdata, leftP, i - 1)
If (rightP > j + 1) Then Call QuickSort(tmpdata, j + 1, rightP)
End Sub