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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.