PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
18029 02/08/23 13:47:30 RE(2):PB7.0: FileOpen関数の戻り値について By TTTK
18028 02/08/23 12:47:03 RE(1):PB7.0: FileOpen関数の戻り値について By mtosi2
18027 02/08/23 12:39:01 PB7.0: FileOpen関数の戻り値について By mtosi2

カテゴリ:スクリプトの記述
日付:2002年08月23日 13:47 発信者:TTTK
題名:RE(2):PB7.0: FileOpen関数の戻り値について

mtosi2さん、こんにちは。

>RUN関数実行後 a.txtに書き込む処理が走りますが、DOSがファイルに書き込んでいる間
>PB側からその対象ファイルにOPENをかけようとすると -1が帰ってきます。

多分ロックでしょう。
あるいは、バッチ処理がa.txtを作成する前にFileOpen()を実行してしまっている可能性はありませんか?


>ちなみにa.txtファイルをテキストエディタで開いた状態で
>このプログラムでOPenかけても正常値で帰ってきます。

お使いのテキストエディタとその設定は?
テキストエディタは、ソフトによってファイルをロックしないもの、読み書きロックするもの、書き込みだけ
ロックするもの、ユーザが自由に設定できるもの等があります。

>また、テストプログラムで(PBで作成)a.txtをFileOpenした状態で
>このプログラムでOPENかけたときは異常値でもどってきます。
>テストプログラム、プログラムともにfileOpenモードは 読み取り専用です。

FileOpen()関数は、アクセスモードが「Read!」がデフォルトなのに、ロックは「LockReadWrite!」がデフォル
トです。
mtosi2さんが書いたサンプルソースはファイル名だけの指定ですから、読み書き両方がロックできなければ、
FileOpen()はエラーになると思います。


なお、「DOSバッチ起動後、すぐに次処理へながれないように」の解決策として、私は、テンポラリファイルで
制御する方法をよく使います。
PBでダミーのファイルを作ってからバッチを呼び出し、バッチ側では処理終了後にダミーファイルを消す。PB側
はダミーファイルが存在する間は待つ。
以下のような形でどうでしょう?

【PB側処理】

fp = FileOpen(\"lock.tmp\", LineMode!, Write!) //制御用ファイルを作成
FileWrite(fp, \"dummy\")
FileClose(fp)

Run(\"XXXX.bat\")
//DOSバッチ実行

//Dosバッチが終わるまでループ
Do While(FileExists(\"lock.tmp\"))
//実際には、一定時間でタイムアウトする判断も必要
Loop

//これ以降、a.txtを利用する処理を記述

【DOSバッチ側処理】

rsh %ノード名% -l %ユーザ名% \"(. $HOME/.profile;env | grep ENV_DIR_ID | sort)\" >> a.txt 
del lock.tmp


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows 2000
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS HP-UX
DBMS Oracle 7.2
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.