過去の桐井戸端BBS (桐ver.9)
26010 表を開かずに表題を取得する方法はありますか 吉川 2004/04/22-12:41
桐ver.9-2004です。
いつも勉強させて頂いております。一つ教えてください。
桐の表の表題を取得するのに表を開かずに取得する方法はあるのでしょうか?
開けば「#表題」関数で取得できるのですが、複数の表の表題を取得したいので
なるべく効率良く処理をしたいので・・・
よろしくお願いします。
26011 Re:表題の取得方法 うにん 2004/04/22-13:56
記事番号26010へのコメント

>桐の表の表題を取得するのに表を開かずに取得する方法はあるのでしょうか?
>開けば「#表題」関数で取得できるのですが、

表題はファイルの「中に」書かれているので「ファイルを開かずに」は無理です。
高々20文字なので、ファイル名に表題を組み込んでしまうルールにすればいいかも?

26013 Re:表題の取得方法 幅田 2004/04/22-14:15
記事番号26011へのコメント
会話処理では、「開く」の画面のファイル名一覧で表題は表示できるので表を開く前に見ることができます。
ですから、「#ファイル名」関数などで取得することもできそうな気がしますが、現状では無理ですね。

26016 Re:表題の取得方法 吉川 2004/04/22-15:19
記事番号26011へのコメント
うにんさん、ありがとうございます。
そうですか。
やはり無理なんですね。
今後はファイル名を工夫して見ます。
今回は仕方ないので表を開きながら取得して一覧でユーザーに
見せるように致します。
どうもありがとうございました。

26018 Re:表題の取得方法 吉川 2004/04/22-15:41
記事番号26013へのコメント
幅田さん、ありがとうございます。
いつも大変勉強させて頂いております。
おっしゃるように会話処理のファイル一覧で表題を見ることが
出来るので開かずに取得できるのではと思いました。
でも無理なんですね。
あるフォルダ内にある全ての表のファイル名と表題を別表に取り込み
ユーザーに複数選択させるということをしたかったのですが・・
開きながら表題を取得して実現させたいと思います。
ファイル名が英数字なのでどうしても表題が欲しかったのですが
今後はファイル名を工夫いたします。
どうもありがとうございました。

26019 Re:表題の取得方法 hidetake 2004/04/22-15:50
記事番号26010へのコメント
参考になるかどうかわかりませんが、次のような方法等もあるにはあります。

桐ファイルが増えたので目的のファイルを探すのに苦労しています
http://www.fuku3.com/~habata/kbbs/kakoetc/21100.htm

Re:桐関連ファイルの表題を取り出すVBスクリプト
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=logview_html&no=87#4314
および関連するコメント

なお、VBS に関してはアップロードされたファイルは既に存在しないものもあります。


26020 Re:表題の取得方法 吉川 2004/04/22-17:37
記事番号26019へのコメント
hidetakeさん貴重な情報をありがとうございます。

興味がそそられておりますが私には少々難しいので
少し勉強致します。
後ほど結果をご返事したいと思っております。
ありがとうございました。


26092 Re:表題の取得方法 吉川 2004/04/27-17:30
記事番号26020へのコメント
hidetakeさん、時間がかかりましたがおかげさまで何とかできました。
VBSは初めてのことなので大変でしたが....

hidetakeさんの貴重な過去の情報を元に以下のような流れで複数表のファイル名及び表題を桐に取り込むことができました。

@選択対象表を元フォルダから「k:\kiri\WK発注」へファイル更新する。
ファイル更新 "k:\kiri\システム\4*.TBL" , "k:\kiri\WK発注\"
ファイル名の先頭が"4"のファイルのみを選択したいので..約40表 1表約200レコード)
Aシステムコマンドにて表題取得.VBSを実行
システム &COMMANDCOM , "/c cscript k:\A-基幹業務\DH-買掛管理\表題取得.vbs"
B書き出されたテキストデータ「発注一覧.txt」を桐の表に読み込む。

この流れで2回目以降の実行は約5秒でファイル名と表題の一覧が桐のフォームで表示されるようになりました。(うれしかったです)

始めはファイル更新などやらずに元フォルダ"k:\kiri\システム"を直接指定し、
対象表を書き出そうとしましたが時間がかかるので一回桐で対象表のみを
別フォルダにファイル更新しました。(元フォルダには3千個以上のファイルがありますので)
もっと効果的な方法があるとは思いますが、私の頭と知識ではこれ以上出てきません.
..それにしても表を開かずに表題が取得できたのは感動ものでした。
ありがとうございました。
実は使用しているのは桐ver.9-2004ですがこの表題を取得したい表はver.5の表なのです。
ですから開こうにも開けずにいました。

hidetakeさんには以前桐ver.5のネットワークプリンタ印刷でNETコマンドを使用して
可能だというコメントを拝見し、現在運用しております。この場をお借りして御礼申し上げます。

以下のVBSは見よう見真似で編集して、おかしなところがあって他人様にお見せするのは恥ずかしいのですがご報告致します。
Function部分はhidetakeさんの作成されたものそのままです。

<表題取得.vbs>

File = "k:\A-基幹業務\DH-買掛管理\発注一覧.txt"
Path = "k:\kiri\WK発注"
Const ForReading = 1, ForWriting = 2

Set objFs = CreateObject("Scripting.FileSystemObject")
Set objFld = objFs.GetFolder(Path)
Set objFs2 = CreateObject("Scripting.FileSystemObject")
Set objFld2 = objFs2.OpenTextFile(File, ForWriting, True)

For Each objFl In objFld.Files
objFld2.WriteLine objFl.Name + "," + GetKTitle(objFl)

Next

Set objFld2 = objFs2.OpenTextFile(File, ForReading)
WriteLineToFile = objFld2.ReadLine
objFld2.Close


Public Function GetKTitle(objFl)

(hidetakeさん作成部分)

End Function

26094 Re:表題の取得方法 hidetake 2004/04/27-19:33
記事番号26092へのコメント
吉川さん、こんばんは! (^^)

少しは私の作った VBS も役に立ったようですね!

少し気になったところをあげれば、吉川さんの作られた VBS は
出力結果をファイルに直接落とされているので CSCRIPT.EXE 経由で無くとも
WSCRIPT.EXE 経由でも構わないと思います。

> システム &COMMANDCOM , "/c cscript k:\A-基幹業務\DH-買掛管理\表題取得.vbs"

CSCRIPT.EXE 経由の場合は
> システム "cscript.exe","k:\A-基幹業務\DH-買掛管理\表題取得.vbs"
で構わないでしょうし、WSCRIPT.EXE 経由の場合は
> システム "wscript.exe","k:\A-基幹業務\DH-買掛管理\表題取得.vbs"
で良いと思います。
この場合だと wscript 経由の方がコマンドプロンプトを開かない分だけ、少しスマートな感じがするかな?


あと、折角の機会というか、前に私が作ったのだけれど、私の使っているプロバイダが変わって前のが取れなくなっていたので、
参考までにその分もアップしておきます。

http://www.ne.jp/asahi/users/hidetake/data/public/ktitle.vbs
http://www.ne.jp/asahi/users/hidetake/data/public/ktitle_a.vbs
http://www.ne.jp/asahi/users/hidetake/data/public/ktitle_b.vbs

ktitle.vbs はファイルを1つずつ指定して表題を取り出すタイプ
ktitle_a.vbs はフォルダを指定して表題を取り出すタイプ
ktitle_b.vbs はフォルダを指定して表題を取り出すタイプだが
aタイプに対して、バージョン情報や内部日付、それにショート
ファイル名まで取り出すタイプです。a タイプも b タイプも
サブディレクトリまで含めてファイルを取り出します。
なお出力結果は WScript.Echo で標準出力に出していますので
wscrpt 経由で実行してしまうと、1行ずつ確認作業が面倒です。 (^^;

この VBS を使って表題をテキストファイルに落とす場合は CSCRIPT.EXE
経由で > でリダイレクトしてファイルに落とす必要があります。


また、この VBS もワイルドカードの処理までは行っていません。 (^^;



26095 Re:表題の取得方法 hidetake 2004/04/27-19:50
記事番号26094へのコメント
>少し気になったところをあげれば、

もう1つだけ・・・ (^^;

桐の表題には , (カンマ) を記述することが許されるので
もし、表題に , (カンマ) が含まれていたときの事も考慮
しておいた方が良いのかも知れません。

テキスト読み込みで , カンマ区切り指定で読み込まれて
いるのでしょうから、ファイル名と表題は " " で囲んで
テキストファイルを作成するようにすれば間違いは
無くなると思います。

objFld2.WriteLine objFl.Name + "," + GetKTitle(objFl)

objFld2.WriteLine """" + objFl.Name + """,""" + GetKTitle(objFl) + """"


26097 Re:表題の取得方法 吉川 2004/04/27-20:10
記事番号26094へのコメント
hidetakeさん、こんばんは!吉川です。
今回は本当にありがとうございました。

>少しは私の作った VBS も役に立ったようですね!
少しどころではありません。大変助かりました。

>少し気になったところをあげれば、吉川さんの作られた VBS は
>出力結果をファイルに直接落とされているので CSCRIPT.EXE 経由
>で無くとも WSCRIPT.EXE 経由でも構わないと思います。
なるほど!コマンドプロンプトが出ませんね。
こちらの方が良いですね。

>あと、折角の機会というか、前に私が作ったのだけれど、私の使って
>いるプロバイダが変わって前のが取れなくなっていたので、参考まで
>にその分もアップしておきます。
ありがとうございます。
今すぐにはできませんが時間を取って研究してみたいと思います。

今回、VBSを少し勉強いたしましたが、桐だけではで不可能な処理を
コマンドプロンプトやVBSで実現出来るということを再認識しました。
自分も桐だけでなくその辺も勉強していきたいと思います。

幅田さん、この掲示板があるおかげで本当に助かっております。
ありがとうございました。

26098 Re:表題の取得方法 吉川 2004/04/27-20:36
記事番号26095へのコメント
>>少し気になったところをあげれば、
>
>もう1つだけ・・・ (^^;
>
>桐の表題には , (カンマ) を記述することが許されるので
>もし、表題に , (カンマ) が含まれていたときの事も考慮
>しておいた方が良いのかも知れません。
>
>テキスト読み込みで , カンマ区切り指定で読み込まれて
>いるのでしょうから、ファイル名と表題は " " で囲んで
>テキストファイルを作成するようにすれば間違いは無く
>なると思います。
>
>objFld2.WriteLine objFl.Name + "," + GetKTitle(objFl)
>↓
>objFld2.WriteLine """" + objFl.Name + """,""" + GetKTitle(objFl) + """"
>
>
なるほど、なるほど!
そうですねー。気が付きませんでした。
そのように変更いたします。
しかしながら、細かいところにまで感謝いたします。
これでゆっくり眠れます....
ありがとうございました。
26099 Re:表題の取得方法 hidetake 2004/04/27-21:25
記事番号26092へのコメント
>@選択対象表を元フォルダから「k:\kiri\WK発注」へファイル更新する。
> ファイル更新 "k:\kiri\システム\4*.TBL" , "k:\kiri\WK発注\"
> ファイル名の先頭が"4"のファイルのみを選択したいので..約40表 1表約200レコー
>ド)

ファイル名の先頭が"4"のファイルのみの「表題」を取り出すというのなら
ファイル名から先頭の1文字取ってきて "4" と比較して、一致したら
ファイルに出力する!と言う処理にすれば、別にファイル更新でコピーを
取る必要も無いのでしょうけど・・・(別に意味もあったら別ですが)


For Each objFl In objFld.Files
objFld2.WriteLine objFl.Name + "," + GetKTitle(objFl)

Next



For Each objFl In objFld.Files
If Left(objFl.Name,1) = "4" And UCase(Right(objFl.Name,4)) = ".TBL" Then
objFld2.WriteLine """" + objFl.Name + """,""" + GetKTitle(objFl) + """"
End If
Next


26111 Re:表題の取得方法 吉川 2004/04/28-13:57
記事番号26099へのコメント
hidetakeさん、重ね重ねアドバイスありがとうございます。

>ファイル名の先頭が"4"のファイルのみの「表題」を取り出すというのなら
>ファイル名から先頭の1文字取ってきて "4" と比較して、一致したら
>ファイルに出力する!と言う処理にすれば、別にファイル更新でコピーを
>取る必要も無いのでしょうけど・・・(別に意味もあったら別ですが)

別の意味はまったくないのですが、一度、Mid関数(桐でいう#部分列でしょうか)
で先頭が"4"の"TBL"ファイルのみ出力するように行ったら、
どうやら元フォルダの全てのファイルをなめるのか時間がかかりました。
元フォルダには"4"以外の"TBL"の他、"FRM"・"BAK"・"CMD"等のファイル、
総数約3千個あります。(変なファイルもありますが!)
今、ためしに行ってみたら、
@フォルダに対象表、先頭"4"のみを置いて実行(総数39個)
約4秒
Aフォルダに対象表 + 他のファイルを置いて実行(総数約3千個)
約30秒

ユーザーに対象表から複数の表を選択させる際、なるべく短時間で一覧を
出したかったので断念し、桐のファイル更新コマンドを使用しました。
ファイル更新ならば2回目はさほど時間がかからないので.....(邪道かも?)

VBSで行う場合、ファイルを全てなめるのではなく、ワイルドカードを使用して
先頭"4"のTBLファイルのみを検索するような処理が出来れば良いのですが、
私の頭では出来ませんでした。何か方法はありますかね?

でも、
> If Left(objFl.Name,1) = "4" And UCase(Right(objFl.Name,4)) = ".TBL"
のような関数もあったんですね。
素晴らしい、もっと勉強したくなりました。

又、別の話ですが、hidetakeさん作成のVBSを参考にしてサーバー内のファイルを
整理したいと思います。表題取得だけでなく整理のためにも使わせていただきたいと思っております。
どうもありがとうございました。

戻る