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

投稿日: 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


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

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

- Web Forum -