tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル平均について
記事No13167
投稿日: 2008/10/23(Thu) 16:19
投稿者へーみち
はじめまして。いつも拝見させていただいております。

早速質問をしたいと思いますが、

私は現在テキストファイルのデータを読み込み、平均を求めるプログラムを作っています。
具体的に申し上げますと、テキストファイルの中身は・・

A,B,C,D,
1,2,3,4,
5,6,7,8,
1,2,3,4,
5,6,7,8,

となっており、Aの列の平均、Bの列の平均・・・・といった具合に、コマンドボタンをクリックするとテキストボックスに結果を表示させたいのです。

A B C D
6 8 10 12        ←このような感じで表示させたいのです。

専門書などを参考にしてみたものの、どうしてもうまくいきません。どうかご教授願いないでしょうか。

環境はXPで、VB6.0を使用しています。

長文失礼しました。よろしくお願いします。

[ツリー表示へ]
タイトルRe: 平均について
記事No13170
投稿日: 2008/10/23(Thu) 18:23
投稿者
> A,B,C,D,
> 1,2,3,4,
> 5,6,7,8,
> 1,2,3,4,
> 5,6,7,8,

> A B C D
> 6 8 10 12        ←このような感じで表示させたいのです。

これ平均になってないと思いますよ。
上のデータで平均を取ったら 3 4 5 6 ですよね。

> どうしてもうまくいきません。どうかご教授願いないでしょうか。

やりたいことは判りますが、どこで引っかかってるんでしょう?
データの読み込み?平均の計算?テキストボックスへの表示?
何を以って「うまくいかない」としているのか誰も判りませんよ?

1行ずつ読み込んでSplit関数で切り分け、各変数に足し込んでいって
最終的にその変数を読み込んだデータ行数で割れば平均は出ると思いますよ。
ファイルがCSV形式ならADOとSQLで一気に平均を求める方法もあります。

[ツリー表示へ]
タイトルRe^2: 平均について
記事No13172
投稿日: 2008/10/23(Thu) 22:10
投稿者へーみち
説明不足で申し訳ありません。

.txt形式のファイルを読み込み、平均を出そうとしています。

当方では、これを読み込み、テキストボックスに表示させるところまではできたのですが、平均を出し、表示させることができません。

for 〜 next を使って一つづつ足していこうと考えたのですが・・・・

visual basic 初心者なのですが、どうしても早急にこのプログラムを作らなくてはいけないのです。基礎もままならぬままなのですが、どうかよろしくお願いします。

[ツリー表示へ]
タイトルRe^3: 平均について
記事No13173
投稿日: 2008/10/24(Fri) 07:05
投稿者花ちゃん
> 当方では、これを読み込み、テキストボックスに表示させるところまではできたのです
どのようにして読み込んでいるのでしょうか?
又、ファイルのサイズや 行数・列数等は都度変化するのでしょうか?
表示は、テキストボックスでなければいけないのでしょうか? ここの MSFlexGrid関係 の
ような使い方をすれば、後の計算等の処理がやり易すかったりします。

> for 〜 next を使って一つづつ足していこうと考えたのですが・・・・
そのようにされればいいのでは。何か問題でもありましたか?
まずは、自分の理解できる方法でやる事が大事かと思いますよ。

例えば、下記の 2.テキストファイル(CSV形式)を変数毎に読み書きする
http://hanatyan.sakura.ne.jp/vbhlp/txt01.htm
のように配列に保存するとか、その時に合計の変数も用意しておいて計算しながら
読み込むとか。

この手のサンプルは、ここにいくらでもありますよ、只、幾らかの応用は必要ですが。
その1. サンプル投稿用掲示板の 平均値を求める(VB6.0)
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view&no=36

http://www.hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=163&no=4
面倒だから、上記のサンプルを一部修正して叩き台を作ってみました。
投稿されたデータをメモ帳で作成して、下記コードを試して見て下さい。

Private Sub Command1_Click()
   Dim intFileNo  As Integer
   Dim TextLine   As String
   Dim Mytext     As String
   Dim CellsData  As Variant
   Dim Sum(3)     As Double
   Dim lngCount   As Long
   Dim i          As Long
   intFileNo = FreeFile
   'シーケンシャル入力モードで Test.csv をオープン
   'ファイルのPATHは別途設定して下さい。
   Open "c:\Test.csv" For Input As #intFileNo
   Do Until EOF(intFileNo)             'EOF(intFileNo)が True になるまで実行
      Line Input #intFileNo, TextLine  '1行全体を変数に読み込む
      TextLine = Replace(TextLine, Chr$(34), "")   ' "" を取り除く
      Mytext = Mytext & Replace(TextLine, ",", vbTab) & vbCrLf
      CellsData = Split(TextLine, ",") 'カンマ区切りで列データを分割
      lngCount = lngCount + 1
      If lngCount > 1 Then    '項目行は演算しない
         For i = LBound(CellsData) To UBound(CellsData)
            Sum(i) = Sum(i) + CellsData(i)
         Next i
      End If
   Loop
   Close #intFileNo
   Dim ken As Long
   ken = lngCount - 1
   Mytext = Mytext & vbCrLf
   Mytext = Mytext & Sum(0) / ken & vbTab & Sum(1) / ken & vbTab & Sum(2) / ken & vbTab & Sum(3) / ken
   Text1.Text = Mytext
End Sub

[ツリー表示へ]
タイトルRe^4: 平均について
記事No13174
投稿日: 2008/10/24(Fri) 12:32
投稿者へーみち
花ちゃんさん。このコードを使わせていただいたところ、うまくゆきました。
ほんとうにありがとうございます!!

ただ、このコードの内容の大半を理解できていないので、ゆっくりと基礎を固めていきたいと思います!!

[ツリー表示へ]