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

投稿時間:2003/07/02(Wed) 19:00
投稿者名:はちこ
Eメール:
URL :
タイトル:
ファイル内の件数をカウントする方法
初めて掲載いたします。

Inputで読み込んだシーケンシャルファイルを条件分岐によって、分けています。
分けた3つのデータの各カウントをログに表示させたいのですが、うまくいきません。
うまくいかないというのは、A,B,Cのデータが混在しているファイルの場合ひとつしか表示しません。
カウントした結果は、P_LOGに転記しています。
かなりつたない現状説明ですが、分かっていただけるか心配ですが、助けてください!
(ログの表示方法が間違っているかもしれないですが…)

↓フォーム記述
Private Sub TORIKOMI_DATA(H_TXT As String)
Dim A_COUNT         As Integer

Do Until EOF(DATA)
データの読み込み記述

Select Case CASE_KUBUN
 Case A        
  A_COUNT = A_COUNT + 1
  P_LOG = " Aデータ :" & A_COUNT & "件"
                
 Case B        
  B_COUNT = B_COUNT + 1
  P_LOG = " Bデータ :" & B_COUNT & "件"

 Case Else      
  C_COUNT =C_COUNT + 1
  P_LOG = " Cデータ :" & C_COUNT & "件"
End Select
Loop

投稿時間:2003/07/02(Wed) 19:21
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ファイル内の件数をカウントする方法
> うまくいかないというのは、A,B,Cのデータが混在しているファイルの場合ひとつしか表示しません。

なにがひとつしか表示しないのでしょうか?

> Dim A_COUNT         As Integer

 B_COUNT C_COUNT が表示しないという事なら、どこで宣言しているのでしょうか

投稿時間:2003/07/02(Wed) 20:16
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: ファイル内の件数をカウントする方法
> Dim A_COUNT         As Integer

Dim B_COUNT         As Integer
Dim C_COUNT         As Integer
も必要でしょう。

> Select Case CASE_KUBUN
>  Case A        
>   A_COUNT = A_COUNT + 1
>   P_LOG = " Aデータ :" & A_COUNT & "件"
>                
>  Case B        
>   B_COUNT = B_COUNT + 1
>   P_LOG = " Bデータ :" & B_COUNT & "件"
>
>  Case Else      
>   C_COUNT =C_COUNT + 1
>   P_LOG = " Cデータ :" & C_COUNT & "件"
> End Select

これでは P_LOG が上書きさせてしまうのではありませんか?

Select Case CASE_KUBUN
 Case A        
  A_COUNT = A_COUNT + 1
                
 Case B        
  B_COUNT = B_COUNT + 1

 Case Else      
  C_COUNT =C_COUNT + 1

End Select

表示する時は下記を最後だけで良く、 Select Case CASE_KUBUNにて
コードを書く必要は無いと思いますが。

  P_LOG_a = " Aデータ :" & A_COUNT & "件"
  P_LOG_b = " Bデータ :" & B_COUNT & "件"
  P_LOG_c = " Cデータ :" & C_COUNT & "件"

...とかとして3種類作成する必要があるのでは?
  A_COUNT = A_COUNT + 1 とかは合計を集計している訳で
この時点で    P_LOG_a = " Aデータ :" & A_COUNT & "件" は
不要と思います。

表示は下記や Label1 〜 Label3 等に表示すれば良いでしょう。
Debug.Print P_log_a
Debug.Print P_log_b
Debug.Print P_log_c


下記は予め宣言が必要になります。
Dim  P_LOG_a As String
Dim  P_LOG_b As String
Dim  P_LOG_c As String

投稿時間:2003/07/03(Thu) 13:53
投稿者名:はちこ
Eメール:
URL :
タイトル:
お礼: ファイル内の件数をカウントする方法
花ちゃん様、nobu様、早々のレスありがとうございました!

各データごとのカウントはおかげさまでできるようになりました。
でも、また不明な点がありまして。。。

今回のカウント記述はフォーム内でやっているのすが、この読み込んだデータに不備があった場合、
ERR_FRGをたててモジュール内のERRMSG_EDITに飛んでます。
このERRMSG_EDITをテキストファイルで出力しています。
このモジュール内に今回のデータカウントも一緒に出力させたいのですが、
1行実行してもここにカウントさえも反映されないのです。。

結果として、エラーがあったときはエラーとカウント件数も一緒に表示するのが望みです。
どのように記述すればよいのでしょうか。
たびたびですが、アドバイスをお願い致します。

↓モジュール記述はこんな感じです。

Dim L_LOG       As String
    Dim L_ERR_MSG   As String
    Dim P_LOG_H         As String
    Dim P_LOG_T         As String
    Dim P_LOG_K         As String
    Dim H_COUNT         As Integer
    Dim T_COUNT         As Integer
    Dim K_COUNT         As Integer

    L_LOG = " (" & "" & H_TXTNAME & "" & ")" & vbCrLf
    If H_COUNT = 0 And T_COUNT = 0 And K_COUNT = 0 _
    And P_ERRCNT = 0 Then

        Select Case P_ERR
            Case 0
              
                P_LOG = P_LOG & " ファイル形式が違うか、処理対象データがありません"
                Call M_CSV_ZERO_SUB(P_LOG)
              
            Case 9
                P_LOG = P_LOG & " AデータでXエラーが発生しました"

            Case 8
                P_LOG = P_LOG & " AデータでZエラーが発生しました"

        End Select

    Else
         P_LOG = P_LOG & " 変更データ :" & H_COUNT & "件"
         P_LOG = P_LOG & " 取消データ :" & T_COUNT & "件"
         P_LOG = P_LOG & " 確定データ :" & K_COUNT & "件"

    End If
    P_LOG = P_LOG & L_LOG
    
End Sub

投稿時間:2003/07/03(Thu) 14:41
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: お礼: ファイル内の件数をカウントする方法
確認したい変数のある行なりにブレークポイントを置いて
(コードを記入しているエリア部分の、一時止めたい行の左をクリックする)
その行の変数値を確認して下さい。期待値が入っていますか?
入っていないならその変数に値をセットしている所までさかのぼり
どこまで良くて、どこから悪いかを調べて下さい。
処理ロジックも問題ですが、変数の値がどこかで消えたり、書き換えられたり
(コードが悪いからでしょうが)している事があります。

デバッグモードの使い方はメニューの「デバッグ」を押せば分かるでしょう。