[三流君] −−>
[VBAで楽しく] −−>
[バックナンバー一覧]
−−> No.141 箇条書きで必要部品を洗い出し単体テストする
箇条書きで必要部品を洗い出し単体テストする
メルマガ発行内容
<箇条書きで必要部品を洗い出し単体テストする>
こんにちは、三流プログラマーのKen3です。
今回は、フローは書かないんだけど、
箇条書きのコメントで、流れを書き、
単体テストで部品を作る、部品の精度を高める、
そんな話を書いてみたいと思います。
※たいしたことないんだけどね(笑)
/*
* 1. 今回のキッカケ
*/
VBScriptでTextからExcelシートへのデータをセットする、
そんな処理の依頼を受けました。
依頼内容を勘違いをしつつ、まとめまた話は下記を見て笑ってもらって、
今回は、私の作成方法を軽く書いてみたいと思います。
依頼内容:
No.140 ヒアリング、プログラム時にほしい情報をもらい設計する
http://www.ken3.org/backno/backno_vba29.html#140
で、
処理概要
xxxx.vbsをダブルクリックしたら、
xxxx.txt 入力ファイル名を入力(できたら選択)
xxxx.xls 出力ファイル名を入力(できたら選択)
シートへのデータセット処理を開始する。
入力ファイル仕様
sheet_1
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・
・
・
・
sheet_2
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
先頭6文字がsheet_の行は、シート名の行で、ここでシートを切り替える
その他の行は、データで、A1〜L4へセットする。
とまとめました。(ほぼ、質問そのままなんだけど(オイオイ))
/*
* 2.作り始める、フローは書かないで箇条書き程度で
*/
さてと、いきなり作り始める人は、居ないと思います。
そんな話はいつも、聞き飽きたよ、
三流プログラマーのアンタだったらどうするの?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ドキッ、、、人の批判は好きなんだけど、自分のことを話すのはイヤなんだけど、
なんて言ってないで、正直に書くと、
最近は、フローチャートなんてものは、書いてないですね。
※納品時にほしいって言われたら、プログラムが出来てから、
ソースファイルを見ながら書く、そんな感じか、
ソースからフローチャートを作るツールを会社に買ってもらうとか。
えっ、フローチャート書かないの?(ダカラ三流プログラマーなんだよ)
作り方も知らないんですか?(これだから素人なんだよ三流君は)
学校では、要求仕様書・基本設計書でシステム内容、システム化の目的を理解して、
詳細設計書でプログラムの構成を理解する、
プログラマーは、プログラムを組む前にフローチャートを作成する
そんな感じのことを聞いてたんですけど(フローも書けないの三流君は?)
あっ、そうなの?それもありだけど、
面倒なので、流れを箇条書きしようよ。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
それか、Sub〜End Subに’でコメントを書くとか
--- 余談 ---
日光が斜めから射すので、まっすぐに伸びない?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
植物の成長って、日光に向かって伸びるんですよね。
太陽の光がナナメからだったら、ナナメに伸びる・・・
(上司や先輩の育て方や光具合が、新人の成長に影響を与えるのも事実です・・・)
実は、自分に対する栄養の与え方って重要なんですよ。
私のメルマガ見て、そこを目指して進むと、斜めに育つかもしれないので、
いろいろな参考書や有益なHPから正しい光(栄養)を補給してね。
※ナナメに伸びてから、まっすぐに矯正するのは大変なので、
参考程度に読んでね。。。。
------------
流れを箇条書き?’でコメントを書く?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(↑何言ってんのこの人?頭大丈夫?フロー書けよ)
えっと、こんな感じかなぁ。
Sub aaa()
'xxxx.txt 入力ファイル名を入力(できたら選択)
'xxxx.xls 出力ファイル名を入力(できたら選択)
'シートへのデータセット処理を開始する。
End Sub |
なんて書いてから、さらに、
Sub aaa()
'xxxx.txt 入力ファイル名を入力(できたら選択)
'xxxx.xls 出力ファイル名を入力(できたら選択)
'シートへのデータセット処理を開始する。
'入力ファイルのオープン
'出力ファイルのオープン
'入力ファイルがなくなるまでループ
'1行読み込む
'データ行の判断
'If 左から6文字が"sheet_"か判断する
'出力シートの切り替え、シートを選択する
'カウンタを1行目へ
'Else
'データのセット
'セット位置を増やす
'後始末
'入力ファイルクローズ
'出力ファイルクローズ
End Sub |
と、日本語で、わかる部分を書き込みます。
これがサクっと書けない部分は、疑問点があったり、
処理的に難しい(データ流れや制御が浮かばない)ので、部分的に考えてみる。
そんな感じで、組み始めているかなぁ、私は。
※教科書的じゃないので、参考程度にね。
/*
* 3.必要な命令、オブジェクトを探る
*/
日本語で処理内容書いたって、意味無いよ。(なんだこの三流方式は・・・)
まぁ、そんなこと言わないで一度やってみてよ。
ここから先なんだけど、
部品を組み合わせて1つの製品を作る
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
そんなイメージで行くと、部品をそろえたり、作成精度を上げるために、
箇条書きした機能を実行するには、サクっと書けない部分(部品)を調べます。
まず、問題になるのが、言語の編集方法やエディターの使い方。
VBScriptは、拡張子が.vbsならOKと簡単なので、
デスクトップにtest.vbsと拡張子を変えたファイルを作成して、
メモ帳で書き込み、ダブルクリックで実行のテストをしてみた。
↑test.vbsファイルの作成とテスト
ここから、必要な機能(部品)を探っていく。
ファイル名の入力方法を探る
^^^^^^^^^^^^^^^^^^^^^^^^^^
'xxxx.txt 入力ファイル名を入力(できたら選択)
'xxxx.xls 出力ファイル名を入力(できたら選択)
なんて、日本語で書くと楽だよね。
VBscriptで書くとどうなるのか、調べてテストする。
InputBoxが使えるので、
値=InputBox(メッセージ,タイトル,初期値)
と値を返してくれるので、
strPATH = InputBox("ファイル名を入力してね","入力ファイル","d:\work\a.txt" )
MsgBox strPATH & "を入力しました。"
でテストしました。
↑InputBoxのテスト
なんとか、使えそうですね。
次は、
テキストファイルを開いてみますか。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
VBAのOpenステートメントは使えなくて、FileSystemObjectでアクセスするみたいです。
↑私がASPでやったことあったので、サクっと書けるけど、
初めてVBScriptやった人は、ここからの調査になる。
※知識のアリ、無しは別にして、1つ1つつぶしていく。
ASP系の解説 ( http://www.ken3.org/asp/ で、書いてます)
^^^^^^^^^^^
No.10 テキストファイルからデータを読む
http://www.ken3.org/backno/backno_asp03.html#10
.ReadLine テキストファイルから1行データを読み込む
http://www.ken3.org/cgi-bin/test/test010-1.asp
.AtEndOfStream でファイルの終端をチェックする
http://www.ken3.org/cgi-bin/test/test010-2.asp
上記の解説を参考にして、
行数の少ないファイルでテストする、プログラムを作成。
~~~~~~~~~~~~(いきなり本番データ使わないで、小さなデータで)
ファイル操作のオブジェクトを作成して、
データを読み込み、行数と内容をMsgboxで表示してみました
------
' FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = CreateObject("Scripting.FileSystemObject")
' e:\work\a.txt を読取専用モードで開く
Set ts = objFS.OpenTextFile("e:\work\a.txt", 1, True)
n = 1
Do While ts.AtEndOfStream = False '*6ファイルの終端になってない間ループ
strDATA = ts.ReadLine 'ファイルからデータを一行を読む
Msgbox n & "行目:" & strDATA '読み込んだデータを表示
n = n + 1 '行カウンタをUPする
Loop
ts.close '使ったファイルは閉じようよ
-----
ポイントは、
~~~~~~~~~~~~
CreateObject("Scripting.FileSystemObject")
でファイル関係にアクセスするオブジェクトを作成、
Set ts = objFS.OpenTextFile("e:\work\a.txt", 1, True)
で、ファイルを開き、
Do While ts.AtEndOfStream = False
と、.AtEndOfStreamでファイルの終端をチェックしつつ、
.ReadLineを使い、
strDATA = ts.ReadLine
データを読み込みます。
↑FileSystemObject,.AtEndOfStream,.ReadLineのテスト結果
テキストファイルが読めそうなので、
次は、
ExcelファイルをOpenして、シート切り替え、保存して閉じる。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
それがテストできればOKかなぁ。
オブジェクトを作成して、
b.xlsを開き、シートcを選択、データ代入、保存
そんなシンプルな機能のサンプルを作ってみます。
'test.vbs
'^^^^^^^^^
Dim oApp
Set oApp = CreateObject("Excel.Application")
oApp.Visible = False '不可視にする
oApp.UserControl = True
'Excelファイルを開く
oApp.Workbooks.Open "E:\work\b.xls"
'シートを切り替える
oApp.Sheets("CCC").Select
oApp.Cells(2,3) = "テストデータ"
oApp.Sheets("DDD").Select
oApp.Cells(2,3) = "シートDDDへ書き込む"
'ファイルの保存
oApp.ActiveWorkbook.Save
'ブックを閉じ、アプリも終了
oApp.ActiveWindow.Close
oApp.Quit
MsgBox "書き込み終了、確認してね"
'-------------
シートの切り替えや、保存が出来ました。
※ここで1つ疑問?
選択したシートが無かったら?
入力ファイル仕様
sheet_1
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
で、sheet_1が無かったら?シートを勝手に作る?それとも?
あと、もともとあったデータは消してしまう?それとも?
こんな感じで、単体で作成していると、仕様の新たな疑問点が発生したりする。
作成前に疑問点や制約事項がわかると、対応がハヤイのでOKかなぁ。
カンマの区切りデータを分ける方法を探る
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
と、カンマ区切りのデータをもらうことが出来ます。
このデータをバラす方法は?
ここもASP系のメルマガの力を借りて(オイオイ)
Split関数のサンプルを解説
http://www.ken3.org/cgi-bin/test/test024-1.asp
で、
strBOX = Split("Ken3,ASP不得意,VBA少しできる", ",")
と分解元文字列と区切り文字を渡すと、結果がstrBOXに配列で返ります。
結果
strBOX(0) -- Ken3
strBOX(1) -- ASP不得意
strBOX(2) -- VBA少しできる
と、カンマ区切りの文字列から配列を作成できるみたいです。
作成された配列の要素数を知りたいので、
Split関数とUBound関数のサンプルを解説
http://www.ken3.org/cgi-bin/test/test024-2.asp
で、使っていた、
strBOX = Split(strMOTO, " ") '区切り文字にスペース指定
For i = 0 To UBound(strBOX) 'UBound使用インデックス最大値までループ
のUBoundが使えそうです。
/*
* 4.終わりの挨拶
*/
今回は、
プログラムを日本語で箇条書きにして、
まず流れや必要な機能を洗い出す。
その機能を簡単な短いプログラムで確認する。
そんな話を軽く書きました。
部品の確認が終わったら、組み立てなきゃね。
あとは、つなげるだけ・・・ならいいんだけど、いろいろとありそうですね。
何かの参考となれば幸いです。
Excel/Access大好き、三流プログラマーKen3でした。
ページフッター
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
種類別のリンク や 広告など
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]
[三流君(TOP ken3.org へ戻る)]
/ [VBA系TOPへ]
/ [VBA系バックナンバー目次へ移動]