(J言語研究会 2007年2月14日)

Similar documents
コンピュータ概論

Lesson 1 1 EXVBA2000 Lesson01 Lesson01.xls 2

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

BASICとVisual Basic

プレポスト【問題】

Microsoft Word - VBA基礎(3).docx

untitled

スクールCOBOL2002

PowerPoint プレゼンテーション

sinfI2005_VBA.doc

Microsoft PowerPoint - vp演習課題


ExcelVBA

ルーレットプログラム

PowerPoint プレゼンテーション

2013 年 8 月 14 日 管理図作成マニュアル ( 案 ) 益永八尋 Ⅰ. プログラムの概要 品質管理において必要な QC7 道具の一つである管理図作成のプログラムを作成した このプログラムは 下記の管理図を作成するものである 1 BerX-R 管理図 2Me 管理図 3X 管理図 4np 管


CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

94 expression True False expression FalseMSDN IsNumber WorksheetFunctionIsNumberexpression expression True Office support.office.com/ja-jp/ S

B 5 (2) VBA R / B 5 ( ) / 34

コンピュータ概論

My関数の作成演習問題集

エクセルによる数値計算と化学への応用

PowerPoint プレゼンテーション

Microsoft Word - Win-Outlook.docx

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

外周部だけ矩形配列

橡WINAPLI.PDF

PowerPoint プレゼンテーション

情報資源組織演習B:

Microsoft PowerPoint - Visualプログラミング

DAOの利用

Excel Excel Excel = Excel ( ) 1

<4D F736F F D208DEC90AC837D836A B81698F4390B394C5816A2E646F63>

ブロック崩し風テニス

CONTEC DIOプロバイダ ユーザーズガイド

Base によるアプリケーション開発とサポート 鎌滝雅久 /OpenOffice.org 日本ユーザー会 OSC2007 Hokkaido 2007 年 6 月 30 日土曜日 10:55-11:40 北海道大学学術交流会館第 4 会議室

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

ブロック パニック

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

データを TreeView コントロールで表示 VisualStudio2017 の Web サイトプロジェクトで bootstrap, 及び script フォルダの js ファイルが使用できるマスターページを親とする TestTreeView.aspx ページを作成します 下記の html コー

Userコントロール

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

プロセス間通信

Microsoft Word - CygwinでPython.docx

Microsoft Word - VBA基礎(6).docx

SolarWinds Event Log Forwarder for Windows v

Proc luaを初めて使ってみた -SASでの処理を条件に応じて変える- 淺井友紀 ( エイツーヘルスケア株式会社 ) I tried PROC LUA for the first time Tomoki Asai A2 Healthcare Corporation

バスケットボール

Secure iNetSuite for .NET 4.0Jの新仕様について

PowerPoint プレゼンテーション

JavaとVisual Basicを使ったWebサービスの実装

45 VBA Fortran, Pascal, C Windows OS Excel VBA Visual Basic Excel VBA VBA Visual Basic For Application Microsoft Office Office Excel VBA VBA Excel Acc

Excel と Excel_VBA との 関 係 を 見 るには Excel システム 上 で Alt-F11 で 現 れる VBE(Visual Basic Editor) で Project を 見 ればよく 次 のように 示 される 全 体 は VBAProject となっており 例 えば V

構造体

Microsoft Word - HowToConvertIdwToDwg.doc

CommandMatrix_8230E

プロバイダ ユーザーズガイド

卒業論文.PDF

VFD256 サンプルプログラム

Microsoft Word - Writing Windows Installer's DLL.doc

Title.PDF

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

橡実践Oracle Objects for OLE

D0020.PDF

PowerPoint プレゼンテーション

Maser - User Operation Manual

Excel Excel Excel = Excel III 7 ( ) 1

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

かべうちテニス

Transcription:

(J 言語研究会 2007 年 2 月 24 日 ) 鳥邊錬太郎 VB で J-DLL Server を使う 1 はじめに J 言語への郷愁は昔 APL 言語を少し齧った経験があったが当時はメインフレームの専用 TSS 端末からの利用であったことが原因である しかし 一般企業では TSS 利用環境がそれほど裕福ではないこと メモリサイズ CPU の処理速度などの問題などから 実用には使い勝手が良くなかったため 数値計算を含む科学計算処理には Fortran が主流だった 1986 年に 社命で台湾の現地法人に赴任し 1994 年に帰国する間に 世の中はすっかりパソコンに席巻され パソコンで動作するという J 言語が出現しており鈴木義一郎先生がすっかりはまっておられた 2006 年 11 月より 鈴木先生の紹介で J 言語研究会に参加させて頂き 様々な研究発表を拝見して 昔の APL 言語と比較して J 言語の進化の度合いが計り知れないほど大きいことを知った つまり システム開発者にとっては 数値解析プログラムの研究開発に要する時間を大幅に短縮できるし 開発されたプログラムの利用者にとっては J のプロセッサがインストールされていなくても実行できる環境が整っているため これらを十分に普及すれば J 言語は一般社会に貢献できる と考えた そこで これまで2~3 回の研究会での皆さんの発表論文を参考に J を VB に組み込み J そのものが動作したり バックグラウンドで J が動作する仕組みを実験してみた 2 VB 開発環境現在 マイクロソフト社の VB(Visual Basic) は.Net( ドットネット ) プラットホームが最新であるが 筆者の年齢では.Net を導入してもその能力を使いきれるわけではなく まだ十分に使えるとの判断から VB 6.0 での環境で実験を試みた VB の長所は開発者にとって GUI の組み込みが容易で 開発所要時間やバグを少なくする効用もある 3 VB の構造 VB は いわゆる OLE 機能を簡単に取り入れることが可能な言語プロセッサである OLE は 複数のアプリケーションで作成したアイテム つまり " オブジェクト " 1

を収容するための仕組みである OLE は当初 オブジェクトのリンクと埋め込み (Object Linking and Embedding) の略称であった 現在では 単に OLE と呼ばれている OLE のうち リンクと埋め込みに関連しない部分は 現在は Active テクノロジーの一部となっている ( 通称 Active X) 図は VB のユーザ画面に EXCEL の OLE オブジェクトを埋め込んだ例である VB は ユーザインターフェイスである画面を基本としてプログラムコードが存在する もちろん画面を伴わないコードも存在する プログラムは 基本的にユーザが画面上で何らかのアクション (VB ではイベントと称している ) を発生させることにより動作する 基本的には EXCEL の VBA と同じである 4 J-DLLserver の組み込みと実験 J-DLL の組み込み方法は J-SoftWare 社の WebSite http://jsoftware.com/help/user/j_ole_auto_server.htm または J 言語のヘルプより system\extras\help\user\j_ole_auto_server.htm を参照して頂きたい もっとも簡単な方法は 志村氏の J for WIN9x/NT 入門 EXCEL とのリンク他 (2003 年 8 月 15 日 ) の 12 ページを参考にするのが早い また VB プロセッサをお持ちの方は 以下のルートディレクトリから VB のテストプログラムを入手できる このルートは J をインストールした場所で \j601\system\examples\ole\vb である このテストプログラムは 3 種類収録されている これらのプログラムからの DLL 関数からの戻し値の一部が文字化けする現象があるが このような現象は英語版の DLL やコントロールを日本語版 OS で使用した場合に多いことが判っている 筆者は J-DLLserver を対象にしているが テストプログラムの対象範囲は J-EXEserver にも及んでいる J-DLLserver や J-EXEserver は VB 言語や C 言語の Active X として動作するが これらの Server に設定されているプロパティやイベントの詳細仕様が不明なため試行錯誤でプログラミングしているのが現状である Break interrupt J execution Clear erases all definitions in J Do execute a J sentence ErrorText/ErrorTextM get error text (run after a J error) Get/GetB/GetM get the value of a J variable IsBusy returns 0 if J is ready to execute, else an error code Log display (1) or discard (0) the J EXE session log Quit causes J EXE server to close when last object is released Set/SetB/SetM set a value to a J variable Show show (1) or hide (0) the J EXE server Transpose return array data transposed 2

J 以外の言語やアプリケーションから J-DLLserver を利用するには一定の法則がある 志 村氏の報告にもあるとおり 初めに J-DLLserver の宣言が必要である 4.1.VB での DLL 参照宣言 VB プロセッサー (VB エディタ ) の プロジェクト 参照設定 をクリック 参照設定画面より J DLL Server( )Type Library を探してレ印をつけて参照設定は終了 し VB の中で J DLL Server が使用可能となる 3

4.2.VB による J 関連のコーディング J-DLLserver の宣言 J コマンドの入力 VB ではユーザー インターフェースのひとつ TextBox ( 赤枠 ) を使って必要項目を 入力する Public Js As Object Public result As Valiant Private sub SetJDLL() Set Js = New JDDLserver TextBox に入力されたデータは Text プロパティによって取り出すことが出来る TextBox には名前がつけられるが ここでは DoText ( 赤枠 ) と名づけたので Text プロパティは DoText.Text で取得できる Text に格納された J コマンドを実行するには J-DLL の J 実行コマンドを呼び出す必要がある それは result = Js.Do(DoText.Text) で計算が終了である ただし 計算結果は出力されません DoText.Text の内容が たとえば 4

DoText.Text = A=:i.2 2 のときは i.2 2 の結果が J-DDL が確保した A という名前の変数に保存された状態 になっているので VB でこの結果を使用することが出来る [ ] もし 計算結果を表示したい場合は GetText ( 青枠 ) の TextBox に J コマンドを入 力して Enter キーを叩く [ ] 5

もちろん 計算結果も残し 結果も表示することも出来る [ ] そして ここでは A に出来た 2 X 2 の行列の逆行列を J 言語で求めている その結果は 画面に表示されると同時に B に保存されている [ ] 6

5 VB プログラム全体 VB プログラムは 先に述べた J601 ファイルの j601\system\examples\ole\vb にある VB コード jsrv1.vbp を参考に 筆者が独断と偏見で書き変えたものである この作業の最大 の目的は J 言語の普及を図るには J を扱いやすくすることが最大の解決策と考えたからである 普段 J を使い慣れている研究者やそれに準ずる方々にとっては とても使い易く簡単な言語だと思いがちだが J 言語を道具としてのみ利用して問題解決を志す人には J の高度な理論を吸収している暇がない方もいる そこで まず J 言語プロセッサをインストールしなくても 簡単に J が使える環境を用意することが肝心ではないかと考えた次第である その環境を利用している間に J の素晴らしさ J でなければ何倍もの時間を消費することなどを実感してもらえれば 必然的に利用者が増えるのではないかと思う こうなれば J を愛する JAPLA 人として 望外の喜びではないだろうか したがって ここでご披露する VB コードは J 言語としては本質的なものではないのであ るが JAPLA の諸先生方への筆者の研究成果 (?) をそろそろ発表しなければならず あえ て発表させていただくこととした 7

5.1. 本 VB プログラムの構造 (Subroutine 等 ) jserver: Project Name frmjserver: J 言語を処理する画面 mduljserver: 画面に依存しないコード群 8

5.2. 画面設計とコード a. frmjserver 9

プロパティの内容 [ ] Private Sub Form_Load() Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000) Me.Top = GetSetting(App.Title, "Settings", "MainTop", 1000) Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 9000) Me.Height = GetSetting(App.Title, "Settings", "MainHeight", 5000) If WindowState = 0 Then Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 SetDLL Call mnuclearj_click Private Sub Form_Resize() If Me.Width > 6105 Then DoText.Width = Me.Width - (6135-5175) GetText.Width = Me.Width - (6135-5175) Text1.Width = Me.Width - (6135-5775) If Me.Height > 3510 Then Text1.Height = Me.Height - (3510-1695) Private Sub DoText_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ec = Js.Do(DoText) DoText.SelStart = 0 DoText.SelLength = Len(DoText.Text) If ec Then Select Case ec Case Is = 16 Text1 = "Value Error(Code=" & ec & ")" Case Is = 3 Text1 = "Domain Error(Code=" & ec & ")" Case Else Js.ErrorTextM ec, v Text1 = "Miscellaneous Error(Code=" & ec & ")" End Select Else Text2.Text = DoText.Text Text1.Text = Text1.Text & "Do:" & Text2.Text & Chr(13) & Chr(10) Text1.SelStart = Len(Text1.Text) DoText.SelStart = 0 DoText.SelLength = Len(DoText.Text) DoText.SetFocus 10

Private Sub SetDLL() Set Js = New JDLLServer frmjserver.caption = "J 言語 JDLL Server For j601" Private Sub GetText_KeyPress(KeyAscii As Integer) Dim X As Variant Dim v As Variant Dim ttext As Variant If KeyAscii = 13 Then KeyAscii = 0 ec = Js.Do("JGet=. " & GetText) If ec Then Select Case ec Case Is = 16 Text1 = "Value Error(Code=16)" Case Else Text1 = "Miscellaneous Error(Code=" & ec & ")" End Select Else ec = Js.GetB("JGet", X) If ec Then Select Case ec Case Is = 16 Text1 = "Value Error(Code=16)" Case Else Text1 = "Value Error(Code=" & ec & ")" End Select Else Text2.Text = "" jdisplay X, Text2 Text1.Text = Text1.Text & "Get:" & GetText.Text & Chr(13) & Chr(10) & _ Text2.Text & Chr(13) & Chr(10) Text1.SelStart = Len(Text1.Text) GetText.SelStart = 0 GetText.SelLength = Len(GetText.Text) GetText.SetFocus Private Sub mnuclearj_click() On Error Resume Next DoText.Text = "" GetText.Text = "" Text1.Text = "" Js.Clear DoText.SelStart = 0 DoText.SelLength = Len(DoText.Text) DoText.SetFocus b. mduljserver 11

Public Js As Object Public Sub jdisplay(y As Variant, t As Object) Dim rank As Long rank = getrank(y) t = "" If VarType(y) = vbstring Then t = y Exit Sub If rank = 0 Then t = y ElseIf rank = 1 Then For i = 0 To UBound(y, 1) t = t & " " & y(i) Next i ElseIf rank = 2 Then For i = 0 To UBound(y, 1) For j = 0 To UBound(y, 2) t = t & " " & y(i, j) Next j t = t & vbcrlf Next i ElseIf rank = 3 Then For i = 0 To UBound(y, 1) For j = 0 To UBound(y, 2) For k = 0 To UBound(y, 3) t = t & " " & y(i, j, k) Next k t = t & vbcrlf Next j t = t & vbcrlf Next i 12

Public Function jdo(txt As String) As Integer execute sentence, return error code Dim v As Variant jdo = Js.Do(txt) If jdo Then Js.ErrorText jdo, v MsgBox v End Function Public Function jget(txt As String) As Variant ec = Js.Get(txt, X) If ec Then Js.ErrorText ec, X MsgBox X jget = X End Function Public Function getrank(v As Variant) As Long On Error GoTo Err For getrank = 0 To 30 X = UBound(v, getrank + 1) Next getrank Err: End Function 本プログラムの実行ファイルも添付した 実行ファイルは [jserver.exe] であるが JDDLserver のランタイムがインストールされていない場合 動作しない可能性があるため 正式なインストー ラ [jserver.msi] も添付した 次回からは J-DLLserver をインプリメントした J 言語による統計解析パッケージおよび ユーザーが解析手法を自作可能なアプリケーションの作成過程を VB で展開してみたいと思っている 関係諸氏のご意見を頂戴したい 以上 13