[リストへもどる]
一括表示

投稿時間:2002/08/29(Thu) 14:40
投稿者名:アンパンマン
Eメール:
URL :
タイトル:
テキストファイルの読み込み
いつもお世話になります。

テキストファイルを読み込んで、書き込む時に、過去200日間だけ書き出したいのですが、
どうすればいいでしょうか?

テキストファイルは、約150ほどあります。
ファイルの内容は、
日付,データ1,データ2,データ3
ですが、ファイルによって、最新日付も、最古日付も異なります。

Line Input でデータを読み込んでいますが、これは、下に行くので、200日間と判断できません。
データベースのMovePreviousメソッドみたいなのがあれば、いいのですが・・・。

何かアドバイスをお願い致します。

投稿時間:2002/08/29(Thu) 15:35
投稿者名:A221
Eメール:
URL :
タイトル:
Re: テキストファイルの読み込み
マージソートしながらユーザー定義型に読み込んでみてはいかがですか?

投稿時間: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