Dyalog APLでファイルを操作する

みなさんこんにちは。 今日は、Dyalog APLでファイル管理がどのように編成されているかを説明します。 「ネイティブ」Dyalogファイルシステム-DCFで実験します。残りのファイルはこの記事では考慮しません。 例外処理のトピックにも触れます。 すべての実験は、 過去のトピックの資料で実施されます。 残念ながら、一部の画像は価値がありません。申し訳ありませんが、画像ホスティングサービスがわかりません。 行きましょう。





DCFとは何ですか?



Dyalog APLには、コンポーネントファイルという情報を保存する独自の方法があります。 一番下の行は次のとおりです。

ファイルは一連の「セル」(コンポーネント)であり、それぞれに1つの変数の値のみを書き込むことができます。 ファイルに対して次の操作を実行できます:コンポーネントの作成、オープン、読み取り、コンポーネントの置換、新しいコンポーネントの最後へのアタッチ、この記事では考慮されないさまざまな特別な操作のクローズ。

ファイルを開いてみましょう。



画像



また、ファイルが存在しないため、エラーが発生します。 この「実験」から、2つの結論を導き出すことができます。

-ファイルを開くには、システム関数[] FTIEが使用されます。 その引数は、左側の完全なファイル名と、ファイルにアクセスするために後で使用される特別なファイル識別子番号(タイ番号)です。

-インタープリターウィンドウにエラーの原因を示すエラーメッセージが表示されます(この例では、FILE NAME ERROR)。 少し先を見ると、各エラーには独自の番号があり、同じエラーを傍受するために使用されることに注意してください。

そのため、ファイルを開くことができませんでした。 作成する必要があります! これを行うには、[] FTIEと同じ引数で[] FCREATEシステム関数を使用します。



画像



さて、これで識別番号1のtest.dcfファイルができました。デフォルトでは(フルパスを指定しない場合)、ファイルはデスクトップに表示されます。 作成されたファイルにはコンポーネントが含まれていません。コンポーネントは、システム関数[] FSIZEを使用して確認し、右側にファイル番号を渡します。



画像



これまでのところ、この関数の結果の2番目の要素にのみ興味があります。これには、次の空きコンポーネントの番号が含まれています。 ファイルtest.dcfのこの数は1であるため、コンポーネントの数はゼロです。

ファイルに入力するには、システム関数[] FAPPENDを使用します。この関数には、左側に変数または値を、右側にファイル番号を渡す必要があります。 情報が実際に記録されていることを確認するには、[] FREAD関数を使用します。 ファイル番号とコンポーネント番号の2つの値から1つの引数を取ります。



画像



ファイルを閉じるには、ファイル番号で[] FUNTIE関数を使用します。 ファイルとの接続がないことを確認するために、ファイル番号のベクトルを返すnyladic関数[] FNUMSを使用します。



画像



この知識を使用して、前の例のプログラムコードを変更しようとします。



ちょっとした練習



プログラムにいくつかの変更を加えます。

1.プログラムで使用されるテキストをファイルに書き込み、実行時にロードします。

2.関数のテキストを別のファイルに書き込み、ワークスペースがロードされたときにそれらを実行し、終了時にそれらをファイルに保存します。



テキストの保存と読み込み


まず、プログラムテキストを初期化する関数、txtIniを作成します。 必要なのは、ファイルが存在しない場合はファイルを開き、作成してテキストを書き込み、テキストをグローバル(この関数の)変数に読み取ってファイルを閉じることです。

関数ヘッダーは次のようになります。



画像



この関数は、引数(fname)として完全なファイル名を取ります。 tien変数にはファイル番号が格納されます。

ファイルを操作する場合、間違いを犯しやすいため、エラー処理ツールを使用する必要があります。 この例では、Trap:Else:EndTrapの構造が適しています。



画像



設計:トラップ0 1000は、インターセプトするエラーコードを定義します。 この場合、これらはすべてシステムイベント(0)およびすべてのユーザーイベント(1000)です。 また、これらの境界内で、CaseおよびCaseListの構造を使用して、個々のイベントの処理を定義できます。 L1ラベルの使用に注意してください。-例外を処理した後、無条件にジャンプするために使用されます。 残りは簡単です。ファイルにコンポーネントが含まれている場合は、最初のテキストをtxt変数に読み込み、そうでない場合はテキストを入力してファイルに書き込みます。 次に、ファイルを閉じます。

次に、エラーが発生した場合のアクションのシーケンスを決定する必要があります。 ファイルが存在しない場合は、別のケースを記述し、残りの場合は-:その他を記述します。 予期しないエラーが発生した場合に実行できる最も簡単な方法は、[] FNUMS引数を指定した[] FUNTIE関数ですべての開いているファイルを閉じ、[] SIGNAL関数を使用してインタープリターウィンドウにメッセージを表示することです。 その引数は、右側のメッセージテキストと左側のエラーコードです。 この例では、システム変数[] DM(テキスト)および[] EN(エラーコード)を使用するだけで十分です。 ファイルがない場合(または名前が誤って指定されている場合)、このファイルが作成され、ラベルへの移行が実行されます。 すべてが非常に簡単です!



image8



ロードされたテキストをプログラムで使用するには、テキストのネストされたベクターtxtの要素への呼び出しを追加して、アプリケーション関数をわずかに変更する必要があります。



image9



その値(フォームヘッダー)がファイルから取得されるようになったため、引数はWhatNum関数で削除されました。 すべての記号定数は、ネストされたベクトル要素をシンボルベクトルに変換するDisclose関数の呼び出しで、txtベクトルの要素の呼び出しに置き換えられました。 checkNum関数では、変更は同じです。



画像10



コードを隠す


そして今、最も興味深い:コンポーネントファイルに変数を保存することができますが、関数は保存できますか? はい! これを行うには、関数をテキストに変換して変数に割り当てるだけでよく、saveFns関数が行います。

変換は即座に行われます。関数名を引数として使用するシステム関数[] CR(正規表現)は、テキストを含む文字マトリックスを返します。 しかし、本当の魔法は「各」演算子の使用から始まります。



image11



したがって、変数にはすべて関数の3つのテキストが含まれており、各テキストはシンボル行列であり、スカラー(ランクは0)の形式で表示されます!

その後、既に説明したファイルへの書き込み手順に従います。 最後に、システム関数[] EXへの呼び出しを追加します。これにより、ワークスペースから不要なオブジェクトが削除されます。



image12



これで、初期初期化コードを書くことができます。これは、ワークスペースがロードされたときに実行されます。 アクションのシーケンスは次のとおりです。ファイルを開く、読み取る、ファイルを閉じる。 その後、APLの魔法が再び働き始めます。手のわずかな動きで、ベクトルはすべてワークスペースの本格的な機能に変わります! 関数を読み込んだ後、WhatNumを呼び出して、すべてが機能することを確認できます。



画像13



素晴らしい。 関数をファイルに保存し、システム変数[] LXの内容を変更し、作業領域を保存するだけです。 その後、ファイルを操作するための関数のみがワークスペースに配置され、アプリケーションコードがロードされます。



画像14



プログラムを起動するには、ワークスペースファイルを開くだけで、すべてが正しく完了すると、アプリケーションウィンドウが画面に表示されます。



合計



今日はAPLの魔法を少し見ましたが、同時にファイルの操作や例外の処理などの重要なことについても学びました。 継続する。



All Articles