サンプル投稿用掲示板 VB2005 〜 用トップページ VB6.0 用 トップページ
- 日時: 2009/12/27 15:24
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[ファイル入出力][データベース][] * * キーワード:CSVファイル,,,,, * ***********************************************************************************
ファイルサイズが大きいと使えないようですが、せっかく投稿頂いたので何かの参考に。 --- by 花ちゃん ---
元質問内容 ------------------------------------------------------------------------------------ 5000日分のデータがあり、過去5日分の平均値を取りたいのですが、一つのコードだと何も問題はありませんが、コードが5000個あります。 かなり時間がかかってしまいます。これは何とか出来ないでしょうか?
------------------------------------------------------------ Re^3: 平均値を求める - A221 2002/11/06-14:48 No.1272 ------------------------------------------------------------
手元にあった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
|