過去の桐井戸端BBS (桐ver.8)
17509 たくさんの表ファイルをいちいち開くことなく各ファイルのデータ数を知ることはできますか まもる 2002/10/10-18:00
あるフォルダにたとえば100個の表ファイルを入れているとして、
それらのファイルをいちいち開くことなく、各ファイルのデータ行数を知る方法というのはできますでしょうか?
17513 Re>各表のレコード数を一括して取得したい 悲しげ 2002/10/10-21:13
記事番号17509へのコメント
どもっ、まもるさん
>あるフォルダにたとえば100個の表ファイルを入れているとして、
>それらのファイルをいちいち開くことなく、各ファイルのデータ
>行数を知る方法というのはありますでしょうか?

表を開かないでそのレコード数を知る(「#総件数」関数を使う)ことは困難ですが(^^;)、
そのココロは、いちいち会話処理で開いて調べることなく=一括処理とかで
自動的に取得したいと云うことだと解釈します。
とすれば、以下の一括処理あたりでどうでしょう?

※ 仮称"行数調査作業.tbl"は次の項目を有しているとします。
   [ファイル名]:文字列型項目
   [行数]   :長整数
------------------------------------------------------------
変数宣言 固有,長整数{&i,&総件数},固有,文字列{&FILE}
確認 "表とその行数調査を実行します",&実行リターン
条件(&実行リターン<>1) 終了
表 "行数調査作業.tbl",表番号=1
表表示
行削除 *,圧縮
&i=1
繰り返し
 &FILE=#ファイル検索("*.tbl",&i)
 条件(&FILE="") 繰り返し中止
 if(#ファイル名(&FILE,3)<>"行数調査作業.tbl")
  /*自表を開かないために*/
  表 &FILE,表番号=2
  &総件数=#総件数
  終了 表 2
  編集表 1
  行追加 終了状態=&実行リターン,[ファイル名]=&FILE,[行数]=&総件数
 end
 &i=&i+1
繰り返し終了
表形式編集 ガイド="結果を確認して下さい"
------------------------------------------------------------
以上で、当該表に取得した表ファイル名と行数を一覧できる筈です。
表ではなく、「印字」コマンドを使ってテキストに書き出すやり方もありますが、
表を使った方がわかりやすいと思います。

17523 悲しげ様へ まもる 2002/10/11-10:37
早速活用させて頂いております。
その便利さに驚かされるばかりで、作業効率が大幅に向上致しました。
本当にありがとうございます。
で、さらに申し訳ありません・・・厚かましいと思うのですが、もし可能なら叶えて頂きたい内容があります。
ご教授頂いた一括処理は、該当のフォルダの中に入れた状態で実行しておりますが、
これを画面上でフォルダ指定できるようにはできないでしょうか?
また、フォルダの中にさらにフォルダがあっても、その中も調査するようにはできないでしょうか?
身勝手な希望ばかり申し上げて申し訳ございません。
どうかよろしくお願い致します。
17535 Re>17523 各表のレコード数を一括取得 悲しげ 2002/10/11-23:47
記事番号17513へのコメント
どもっ、まもるさま

>ご教授頂いた一括処理は、該当のフォルダの中に入れた状態で実行しておりますが、
>これを画面上でフォルダ指定できるようにはできないでしょうか?

これは「フォルダ名入力」コマンドで簡単に実現できます。しかし

>また、フォルダの中にさらにフォルダがあっても、その中も調査するようにはでき
>ないでしょうか?

いわゆる下位ディレクトリも一緒に調べてしまいたいと云うことだと思いますが、これはちと面倒です。
例えば「システム」コマンドからバッチで"dir"の結果をファイルに出力したものを使えば可能かと思います。
が、実はMS-DOSのコマンドなんかはかなり忘れてしまってるし、
今回は任意の別フォルダを連続して手動指定する方法を挙げておきます。
------------------------------------------------------------
変数宣言 固有,長整数{&i,&総件数},固有,文字列{&FILE,&FOLD,&DP}
確認 "表とその行数調査を実行します",&実行リターン
条件(&実行リターン<>1) 終了
&DP=#データパス名
*初期フォルダ名は任意に指定可、ここでは当該一括のあるフォルダを当てた
&FOLD=&DP
データパス名 &DP,固定=する
表 "行数調査作業.tbl",表番号=1
行削除 *,圧縮
繰り返し
 フォルダ名入力 初期値=&FOLD \
  ,プロンプト="調べるフォルダを指定して下さい(Escで中止)" \
  ,許可作業=なし \
  ,&FOLD
 条件(&FOLD="") 繰り返し中止
 表表示
 &i=1
 繰り返し
  &FILE=#ファイル検索(&FOLD+"*.tbl",&i)
  条件(&FILE="") 繰り返し中止
  if(&FILE<>&DP+"行数調査作業.tbl")
   /*自表を開いてしまわないために*/
   表 &FILE,表番号=2
   &総件数=#総件数
   終了 表 2
   編集表 1
   行追加 終了状態=&実行リターン,[ファイル名]=&FILE,[行数]=&総件数
  end
  &i=&i+1
 繰り返し終了
 メッセージボックス "フォルダ指定","続けて別フォルダを調べますか?" \
  ,アイコン=?,ボタン指定=5,&実行リターン
 条件(&実行リターン<>6) 繰り返し中止
繰り返し終了
表形式編集 ガイド="結果を確認して下さい"
------------------------------------------------------------
17538 Re:Re>17523 各表のレコード数を一括取得 kazukichi 2002/10/12-00:45
記事番号17535へのコメント
悲しげ様、お忙しい中身勝手な要望に付き合っていただき、本当に恐縮しております。
新たにご教授頂いた内容については、休日明けの火曜日に早速試してみるつもりです。
お恥ずかしい話ですが、桐ユーザーとなってまだ2年ということもあって、一括処理というものを今回はじめて作りました。
ですが悲しげ様のご教授どおりに作成して、結果難なく動作したので、本当に嬉しいです。
実はこの作業は、当初ソフトウェア会社に発注する予定のものでした。見積もり金額が15万円と提示されたので、
びっくりしてしまって、それでここの掲示板におすがり致しました。
本当にありがとうございます。
分からない部分が出たら、また質問させて下さい。よろしくお願いいたします。
17541 改良版(サブフォルダも可に) 悲しげ 2002/10/12-19:56
記事番号17535へのコメント
変数宣言 固有,長整数{&総件数,&error},固有,文字列{&調査表,&FILE,&FOLD,&DP}
*初期フォルダ名は任意に指定可、ここでは当該一括のあるフォルダを当てた
&DP=#データパス名,&FOLD=&DP,&調査表=&DP+"行数調査作業.tbl"
データパス名 &DP,固定=する
フォルダ名入力 初期値=&FOLD \
 ,プロンプト="調べるフォルダ(サブフォルダ含む)を指定して下さい。<Esc>で中止。" \
 ,許可作業=なし,&FOLD
条件(&FOLD="") 終了
ファイル削除 "List.txt",終了状態=&実行リターン
ファイル削除 "List-Up.bat",終了状態=&実行リターン
印字開始 "List-Up.bat",終了状態=&実行リターン
 印字 "Dir "+#文字置換(&FOLD,"\","\\")+"*.tbl /s /b > list.txt"
 /*「\t」がタブ、「\n」が改行と見なさるのを防ぐため。但し環境設定に依存するらしく辛い。*/
印字終了
シェル実行 "List-Up.bat",表示=最大化,&実行リターン
確認 "シェル窓を閉じてから次に進みませう"  /*シェル実行と桐の処理は非同期なため*/
表 &調査表,表番号=1
行削除 *,圧縮
読み込み テキスト,"List.txt",区切り="0009",空白削除=しない,項目名=する \
 ,終了状態=&実行リターン,{[ファイル名]}  /*訳もなく区切りはtabにしてみた*/
if(#空ファイル)
 確認 "サブフォルダ含めて、表がひとつも無いようです"
 終了
end
ジャンプ 行番号=1
表表示
エラー処理 手続き=error
繰り返し(.not #EOF)
 &FILE=[ファイル名],&error=0
 if(&FILE<>&調査表)
  /*自表を開いてしまわないために*/
  表 &FILE,表番号=2
  &総件数=#総件数
  終了 表 2
  編集表 1
  /*↓レコードポインタは今まさにここにあるので*/
  条件(&error<1) 行訂正 終了状態=&実行リターン,[行数]=&総件数
 end
 ジャンプ 行番号=+1
繰り返し終了
表形式編集 ガイド="結果を確認して下さい"
終了

proc error()
 &error=1
 メッセージボックス "「"+#ファイル名(&FILE,3)+"」でエラー発生!" \
  ," 上記ファイル検索過程で何らかのエラーが発生しました!\n" \
  +" エラーの原因は恐らく「変数の未宣言」にあると思われますが、" \
  +"この表をスキップ(検索対象から除外)して次に進むことにします。\n" \
  +"   これって反則かも? (^^;) (^^;)" \
  ,アイコン=!,ボタン指定=1,制御文字展開=する,&実行リターン
  /*「アイコン」と「ボタン」は半角カタカナ*/
end

*-----以上。請う、添削。(^^;)
17551 Re:改良版の微改良 悲しげ 2002/10/13-17:13
記事番号17541へのコメント
> if(&FILE<>&調査表)
   ↓
 if(#LC2(&FILE)<>#LC2(&調査表))

> メッセージボックス "「"+#ファイル名(&FILE,3)+"」でエラー発生!" \
              ↓
 メッセージボックス "「"+&FILE+"」でエラー発生!" \
17583 Re:改良版の微改良 まもる 2002/10/15-10:56
記事番号17551へのコメント
No.17535にてご教授頂いた内容は問題なく動作したのですが、No.17541及びNo.17551
でご教授頂いた内容では、なぜかエラーになります。
----------------------------------------------------------------------------
一括処理の実行中にエラーが発生しました。
KU1090:コマンドの形式に誤りがあります
詳細 ," 上記ファイル検索過程で何らかのエラー
ファイル名 ***.cmd(←当方で作成したファイル名になっています)
行番号 47
----------------------------------------------------------------------------
悲しげ様のご教授に基づき作成した全文は以下のとおりです。
----------------------------------------------------------------------------
変数宣言 固有,長整数{&総件数,&error},固有,文字列{&調査表,&FILE,&FOLD,&DP}
*初期フォルダ名は任意に指定可、ここでは当該一括のあるフォルダを当てた
&DP=#データパス名,&FOLD=&DP,&調査表=&DP+"行数調査作業.tbl"
データパス名 &DP,固定=する
フォルダ名入力 初期値=&FOLD \
 ,プロンプト="調べるフォルダ(サブフォルダ含む)を指定して下さい。<Esc>で中止。" \
 ,許可作業=なし,&FOLD
条件(&FOLD="") 終了
ファイル削除 "List.txt",終了状態=&実行リターン
ファイル削除 "List-Up.bat",終了状態=&実行リターン
印字開始 "List-Up.bat",終了状態=&実行リターン
 印字 "Dir "+#文字置換(&FOLD,"\","\\")+"*.tbl /s /b > list.txt"
 /*「\t」がタブ、「\n」が改行と見なさるのを防ぐため。但し環境設定に依存するらしく辛い。*/
印字終了
シェル実行 "List-Up.bat",表示=最大化,&実行リターン
確認 "シェル窓を閉じてから次に進みませう"  /*シェル実行と桐の処理は非同期なため*/
表 &調査表,表番号=1
行削除 *,圧縮
読み込み テキスト,"List.txt",区切り="0009",空白削除=しない,項目名=する \
 ,終了状態=&実行リターン,{[ファイル名]}  /*訳もなく区切りはtabにしてみた*/
if(#空ファイル)
 確認 "サブフォルダ含めて、表がひとつも無いようです"
 終了
end
ジャンプ 行番号=1
表表示
エラー処理 手続き=error
繰り返し(.not #EOF)
 &FILE=[ファイル名],&error=0
 if(#LC2(&FILE)<>#LC2(&調査表))
  /*自表を開いてしまわないために*/
  表 &FILE,表番号=2
  &総件数=#総件数
  終了 表 2
  編集表 1
  /*↓レコードポインタは今まさにここにあるので*/
  条件(&error<1) 行訂正 終了状態=&実行リターン,[行数]=&総件数
 end
 ジャンプ 行番号=+1
繰り返し終了
表形式編集 ガイド="結果を確認して下さい"
終了

proc error()
 &error=1
 メッセージボックス "「"+&FILE+"」でエラー発生!" \
  ," 上記ファイル検索過程で何らかのエラーが発生しました!\n" \
  +" エラーの原因は恐らく「変数の未宣言」にあると思われますが、" \
  +"この表をスキップ(検索対象から除外)して次に進むことにします。\n" \
  +"   これって反則かも? (^^;) (^^;)" \
  ,アイコン=!,ボタン指定=1,制御文字展開=する,&実行リターン
  /*「アイコン」と「ボタン」は半角カタカナ*/
end
--------------------------------------------------------------------------------
何か記述ミスをしているのでしょうか?
申し訳ございませんが、添削方々ご指導をお願い致します。

追伸
No.17535にてご教授頂いた内容にてもさらに作業効率が上がりました。助かっております。

17588 Re:改良版の微改良 悲しげ 2002/10/15-12:47
記事番号17583へのコメント
まもるさん

>  ,アイコン=!,ボタン指定=1,制御文字展開=する,&実行リターン
>  /*「アイコン」と「ボタン」は半角カタカナ*/

ここんとこじゃないでしょうか?
17590 Re:改良版の微改良 まもる 2002/10/15-12:57
記事番号17588へのコメント
  ,アイコン=!,ボタン指定=1,制御文字展開=する,&実行リターン
  /*「アイコン」と「ボタン」は半角カタカナ*/

この部分の記述をどのように直したらよろしいでしょうか?
17591 Re:改良版の微改良 悲しげ 2002/10/15-13:08
記事番号17588へのコメント
原因判明。

> メッセージボックス "「"+&FILE+"」でエラー発生!" \_

判りやすいようにアンダーバーで代替しておきましたが、上記の末尾に半角スペースが付いています。
このゴミを除去して実行しましょう。

「アイコン」と「ボタン」は全角でも通るんですね、知らなかったです。(^^;)
17592 Re:改良版の微改良 悲しげ 2002/10/15-13:27
記事番号17591へのコメント
ちなみに、\の後ろの半角スペースは、オリジナルの拙稿#17541には
キッパリと存在していませんので。(^^;)

17593 Re:改良版の微改良 まもる 2002/10/15-14:05
記事番号17592へのコメント
私の記述ミスでご迷惑をお掛けしまして申し訳ございませんでした。
さて、ご指摘頂いた箇所を訂正のうえ、実行しましたところ、エラーは出ないのですが、

サブフォルダを含めて、表がひとつも無いようです

というメッセージが出るばかりです。
もちろん表が存在するフォルダを指定しているのですが、フォルダを幾つかかえてみても同じ状況でした。
私の操作ミス、またはまだ記述ミスがあるのでしょうか?
お手間をかけてばかりで恐縮ですが、さらにご指導願います。
17595 Re:改良版の微改良 悲しげ 2002/10/15-15:31
記事番号17593へのコメント
なるほど。では2点ほど確認したいことがあります。
1)印字コマンドで"List-Up.bat"を書いているのですが、
  このバッチファイルの中味の記述はどうなっているか?
2)桐v8の環境設定(上部メニューバー/ツール/環境設定)で
 「一括」タブ/「高度な設定」牡丹の中で
 「印字コマンドでコントロール文字を展開する」にチェックが
  入っていなければここにチェックを入れて試して見てはどうか?

17596 Re:改良版の微改良 悲しげ 2002/10/15-15:49
記事番号17595へのコメント
おそらく、桐v8の環境設定(上部メニューバー/ツール/環境設定)の
「一括」タブ/「高度な設定」牡丹の中で「印字コマンドでコントロー
ル文字を展開する」にチェックが
◎入っている場合
 印字 "Dir "+#文字置換(&FOLD,"\","\\")+"*.tbl /s /b > list.txt"
◎入っていない場合
 印字 "Dir "+&FOLD+"*.tbl /s /b > list.txt"
としなければならないような気がします。先に
>/*「\t」がタブ、「\n」が改行と見なさるのを防ぐため。但し環境設定に依存するらしく辛い。*/
と書いたのはこの辺りの懸念をさしています。



さてさて、この件、汎用的にはどう対処したらよいのやら?
v9では「印字」コマンドに本件関連のパラメータはついたでしょうか?(未確認)
17599 悲しげ様 まもる 2002/10/15-16:12
記事番号17596へのコメント
ご報告致します。

桐v8の環境設定(上部メニューバー/ツール/環境設定)で、「一括」タブ/「高度な設定」ボタンの中で
「印字コマンドでコントロール文字を展開する」にチェックを入れたところ、問題なく動作致しました。
何度か検証いたしましたが、まったく問題ございませんでした。

本当にありがとうございました。
私が当初希望した以上の内容のものにして頂き、感謝の言葉もありません。
会社での業務上、ぜひに欲しかった内容のものなので、今から社内に配布のうえ、活用したいと思います。
本当に、本当にありがとうございました。

17603 Re:改良版の微改良 hidetake 2002/10/15-17:09
記事番号17596へのコメント
>さてさて、この件、汎用的にはどう対処したらよいのやら?
>v9では「印字」コマンドに本件関連のパラメータはついたでしょうか?(未確認)

どうするのでしょうかね?

少なくとも桐9 のβ版までは無かったと思います.
私の場合,桐8 でメッセージボックスコマンドに
「制御文字展開」のオプションがついた段階で,
「環境設定」の設定はデフォルトの設定である
チェック無しにしています.印字コマンドの方は
必要に応じ,自分で制御すれば良いですから・・・

あと,#文字置換(&FOLD,"\","\\") も \n と \N
と \t と \T の場合だけ \\ を付けるようにすれば
問題の発生する確率は少なくなるでしょうか?
でも,少なくなるだけで無くなるわけでは無いですしね! (^^;

桐も現在の設定を取得したり,再設定する関数や
コマンドがあればよいですよね?
#環境設定というのもあるにはあるようだけれど・・・ :-)

あと,次のような VBS を実行すれば,
桐のシステムディレクトリに kiri8.chk と言う
ファイルが存在すれば,Expand Ctrl Char=1 の
状態で \n \t が展開されるし,存在しない場合は展開されない状態となります.
ただし,桐を起動してから,これらの設定(環境設定)を弄れば
INI ファイルに即座に反映されるわけでは無いの
で,必ずしも現在の状態と一致するというわけでもありません.

それこそ,今の桐で,これらの状態を完全に掌握したい場合は,
この設定を固定した INI を使い別桐を起動し,その中で印字コマンドを使わねばならないのでしょうか?
あるいは,無理やり \ の文字だけは _5c の形で印字コマンドに分解するとか?

--- kirichk.vbs ----------------------------------
Dim WS, FS
Set WS = WScript.CreateObject("WScript.Shell")
Set FS = WScript.CreateObject("Scripting.FileSystemObject")

Dim KiriPath, KiriIni, KiriChk, file1, file2
KiriPath = WS.RegRead("HKLM\SOFTWARE\K3\KIRI\8.0\Path")
KiriIni = KiriPath + "\System\kiri8.ini"
KiriChk = KiriPath + "\System\kiri8.chk"
If FS.FileExists(KiriChk)=True Then
FS.DeleteFile KiriChk,True
End If
Set file1 = FS.OpenTextFile(KiriIni)

Dim IniStr
Do Until file1.AtEndOfStream
IniStr = file1.ReadLine
If IniStr = Chr(&h1A) Then
Exit Do
ElseIf InStr(IniStr,"Expand Ctrl Char") Then
IniStr = Right(IniStr,1)
If IniStr = "1" Then
Set file2 = FS.CreateTextFile(KiriChk)
file2.WriteLine("Expand Ctrl Char=1")
file2.Close
End If
Exit Do
End If
Loop

file1.Close
Set FS = Nothing
Set WS = Nothing
WScript.Quit
--------------------------------------------------


17605 Re:改良版の微改良 hidetake 2002/10/15-17:50
記事番号17603へのコメント
>あるいは,無理やり \ の文字だけは _5c の形で
>印字コマンドに分解するとか?

&STR=#s("印字 "+"""Dir """""+&FOLD+"*.tbl"""""+" /s /b >
list.txt""","\",""",_5c,""")
印字開始 "List-Up.bat",終了状態=&実行リターン
コマンド &STR
印字終了

先の条件だと,先頭や最後に \ がつく事は無いので
大丈夫だと思う?が・・・


17613 Re:改良版の微改良 悲しげ 2002/10/15-21:50
記事番号17603へのコメント
どもっ、hidetakeさん

>私の場合,桐8 でメッセージボックスコマンドに
>「制御文字展開」のオプションがついた段階で,
>「環境設定」の設定はデフォルトの設定である
>チェック無しにしています.印字コマンドの方は
>必要に応じ,自分で制御すれば良いですから・・・

取りあえず、私もこの線にしようと思いました。
以前に、v7の頃、拙作品を使う場合は、ユーザに無理やりチェック付きにして
貰って来た経緯があるので、かなり辛いところがありそうではありますが。(^^;)
17614 Re:改良版の微改良(苦肉) 悲しげ 2002/10/15-22:20
記事番号17596へのコメント
---------------------------------------------------
・・・・・・・
msgbox "確 認" \
   ,"桐の上部メニューバー/ツール/環境設定/一括タブ/高度な設定牡丹で「印字コマンドでコントロール文字を展開する」にチェックが入っていますか?\n  ■ チェックが入っている=「はい」\n  ■ チェックは入れてない=「いいえ」" \
   ,アイコン=?,ボタン指定=5,制御文字展開=する,&印字展開chk
   /*「はい」→ &印字展開chk=6 */
印字開始 "List-Up.bat",終了状態=&実行リターン
 if(&印字展開chk=6) /*チェック有りの場合*/
  印字 "Dir "+#文字置換(&FOLD,"\","\\")+"*.tbl /s /b > list.txt"
  /*「\t」がタブ、「\n」が改行と見なされるのを防ぐため。但し環境設定に依存するらしい。辛い。*/
 else        /*チェック無しの場合*/
  印字 "Dir "+&FOLD+"*.tbl /s /b > list.txt"
 end
印字終了
・・・・・・・
---------------------------------------------------
なんて、辛いなぁ。(^^;)
17619 Re:改良版の微改良(苦肉) natsu 2002/10/16-11:29
記事番号17614へのコメント
下の方から、失礼します
印字開始〜印字終了までを
行数調査作業.tblを拝借しまして・・・


表 &調査表,表番号=1
行削除 *,圧縮
行追加 [ファイル名]="Dir "+&FOLD+"*.tbl /s /b > list.txt"
書き出し テキスト,"List-Up.bat",{[ファイル名]}


17620 改良版の微改良(美味肉) 悲しげ 2002/10/16-12:38
記事番号17619へのコメント
どもっ、natsuさん
美味い、旨い、パチパチパチ・・・・
これでタイトルも「苦肉」(にがい)ならぬ「美味肉」(うまい)に
変えることができました。なるほど〜、テキスト書き出しの利用ね、
発想の転換ですね。(^^)v

戻る