DOBON.NET DOBON.NETプログラミング掲示板過去ログ

timerの使い方とファイルからのデータの取得方法について

分類:[.NET]

timerの使い方とファイルからのデータの取得方法について教えてください。

まずはtimerのほうなんですが、現在してる処理の状況を表示させるために、
下記のようにしてみたのですが、オーバーフローが発生しましたというエラーが出てしまします。どうすればいいのでしょうか?

  Private Sub Advance_Situation_Form_Load(ByVal sender As System.Object,
  ByVal e As System.EventArgs) Handles MyBase.Load
With Timer1
.Enabled = True
.Interval = 500
End With
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
  System.EventArgs) Handles Timer1.Tick
Dim msg, str As String
Dim int, filenum As Integer
Dim csv_farm As New csv_change_form()
Dim work As Integer
int = ((max - count) / max) * 100

msg = "CSV変換中 " + CStr(int) + "% 完了"
Situation_Label.Text = msg
End Sub

Private Sub csv_change_ButtonClick(ByVal sender As System.Object,     ByVal e As System.EventArgs) Handles csv_change_Button.Click
Advance_Situation.ShowDialog()
Csv_Change()
Next
End Sub


あと、可変のデータを取得するにはどうすればいいでしょうか?
下記のように書いて見ましたが、上手くいきません。

  SaveFileOpen(file_path, fname)
Dim filesize As Double
filesize = LOF(1)

    Dim data As Char()
Dim datasize As Integer
Do
FileGet(1, hdr)
datasize = ChangeEndian32bit(hdr.uiSize)
ReDim data(datasize)
FileGet(1, data(datasize))
          ・
          ・
filesize = filesize - (Len(hdr.uiTm) + Len(hdr.uiKind) + Len(hdr.space) + Len(hdr.uiSize) + datasize)
Loop Until filesize = 0               
        
 FileClose()


構造体は下のような形をしており、可変のログのデータ部分がuiSizeの後にあります。大きさはuiSize(byte)となってます。どこを直せばよいでしょうか?
  Public hdr As HEDDER_ONLY
  Structure HEDDER_ONLY
Dim uiTm As Integer ' Time
    Dim uiKind As Short ' ログ種別
Dim space As Short
Dim uiSize As Integer ' Log Data Size
End Structure


以上の2点について教えてください。Cなら少ししたことがあるのですが、かなり違うようで参ってます。よろしくお願いします。

環境は2002です。frameworkは1.0です。
こんにちは、はじめさん。ピラルクです。

・オーバーフローの件
 エラーダイアログのdetailでエラー発生行が確認できませんか?
int = ((max - count) / max) * 100 でmaxが0でエラー?

・可変のデータを取得の件
 あまり見てませんが(^^;;
(すくなくてもエラーの種類ぐらい書きましょう)
 これもエラー発生行とエラー内容からあたりがつくのでは?
■No832に返信(ピラルクさんの記事)
> こんにちは、はじめさん。ピラルクです。
回答ありがとです。ピラルクさん。

> ・オーバーフローの件
>  エラーダイアログのdetailでエラー発生行が確認できませんか?
> int = ((max - count) / max) * 100 でmaxが0でエラー?
 その通りでした。お恥ずかしい限りです。
 maxは指定してるんだから、大丈夫だと思っていたのですが・・・
 途中経過を表示させるフォームを呼び出す時にタイマーが動くようにしてしまっていて、maxに値が入る前にイベントが起きてしまっていました。

 しかし、エラーは解消されたのですが、ラベルの表示が反映されません。
 いろいろ試してみましたが上手くいかないです。どこが問題なのでしょうか?

> ・可変のデータを取得の件
>  あまり見てませんが(^^;;
> (すくなくてもエラーの種類ぐらい書きましょう)
>  これもエラー発生行とエラー内容からあたりがつくのでは?
 これについては、エラーはなく、問題点として、意図したデータの取得が出来ないことでした。
 以下のようにしたら、出来ました。
  
  FileGet(1, hdr)
  datasize = ChangeEndian32bit(hdr.uiSize)
  ReDim data(datasize - 1)
  Dim j As Integer
  For j = LBound(data) To UBound(data)
    FileGet(1, data(j))
  Next

DOBON.NET | プログラミング道 | プログラミング掲示板