ホームへ戻るData Base 桐 User Board過去ログ一覧検索プロパティほっ!
過去ログ No122


   書き込み数 : 6100件


<6100> re:画像サイズ取得プログラムを/たゆー 2005年02月26日 土曜日 17時43分49秒

注:me・9x系では、画像の縦横サイズは取得できません
取得できる詳細は<6096>を参照下さい
<6099> 画像サイズ取得プログラムを/たゆー 2005年02月26日 土曜日 17時35分07秒
画像サイズ取得プログラムを「ほっ」に掲載いたしました

内容<6084>でhidetakeさんが紹介されてます
>FileList.VBS
>エクスプローラのファイルリスト(詳細)をテキストまたはHTMLにするVBScript
>http://www.vector.co.jp/soft/win95/util/se304363.html
を、利用しました

その後<6086〜6090>を参考に修正しております
どうもありがとうございます

かなり手抜きです
・シェル実行で「> filelist.lst」の方法が不明で単純に
 「bat」ファイル処理にしています
・コマンドボタン一個で行いたっかたのですが、「他の人が使用しています」の
 メッセージがでて、ボタン2個にしています

イベントは「23行」の小さなファイルです。ご自由に改変してください
そして、いいものができましたら紹介いただけましたら幸いです

そして、勘違い・・・
なぜ、下位フォルダーを検索(取得)しないのか・・・?
それは、単にエクスプローラの表示を取得してるからなのでした。

<6098> Re:ファイルリスト(me編)/hidetake 2005年02月26日 土曜日 14時53分10秒
> 残念ながら、MEのエクスプローラには、画像に「縦・横」の大きさを
> 表示する機能はなそうです

そうなんだぁ〜
そう言えば、9x 系では画像の表示やサムネールなど機能も
限られていましたね・・・

さすがに手元には XP か、それ以降のものばっか。クライ
アント用途では Windows 2000 も無くなってしまいました。 (^^;

OS に依存しないとなると自前で処理する事になるだろう
けど、それでもどうやるかで OS にも関わってきますしね!
「桐」で、このぐらいの簡単な(バイナリ)ファイルの取り
扱いぐらい、あるいは、もっと?他のアプリや API レベル
の処理だってできて欲しいですね!
<6097> re:JPG画像の縦長、横長を知る方法/たゆー 2005年02月26日 土曜日 12時34分56秒

項目名    項目計算式
大きさ 
縦   数値 #数値(#部分列([大きさ],1,#文字位置([大きさ],"x")-1))
横   数値 #数値(#部分列([大きさ],#文字位置([大きさ],"x")+1))

こんな感じかな
<6096> ファイルリスト(me編)/たゆー 2005年02月26日 土曜日 12時28分09秒
「ME」での結果
01:名前
02:サイズ
03:種類
04:更新日時
05:属性
06:作成者
07:タイトル
08:サブタイトル
09:分類
10:ページ数
11:コメント
12:著作権
13:作成日時
14:アクセス日
15:  *4
16:カメラのモデル
17:撮影した画像
18:オーディオ形式
19:サンプル レート
20:オーディオ サンプルのサイズ
21:チャンネル
22:再生の長さ
23:フレーム数
24:フレーム率
25:ビデオ サンプルのサイズ
26:ビデオの圧縮

*4・・手持ちファイルでは表示されず
エクスプローラでも表示されず

残念ながら、MEのエクスプローラには、画像に「縦・横」の大きさを
表示する機能はなそうです

<6095> ファイルリスト(xp編)/たゆー 2005年02月26日 土曜日 12時27分26秒

調査結果&個人メモとして

エクスプローラの右クリックで表示される項目とほぼ同じですが
実際に「filelist」で調べた結果です

「XP」での結果
01:名前(ME)
02:サイズ(ME)
03:種類(ME)
04:更新日時(ME)
05:作成日時(ME)
06:アクセス日時
07:属性(ME)
08:状態
09:所有者
10:作成者(ME)
11:タイトル(ME)
12:表題
13:カテゴリ
14:ページ数(ME)
15:コメント(ME)
16:著作権(ME)
17:アーティスト
18:アルバムのタイトル
19:年
20:トラック番号
21:ジャンル
22:長さ
23:ビット レート
24:保護
25:カメラのモデル(ME)
26:写真の撮影日
27:大きさ
28:  *1
29:  *2
30:この回のタイトル
31:プログラムの説明
32:  *3
33:オーディオ サンプル サイズ
34:オーディオ サンプル レート
35:チャンネル(ME)
36:会社名
37:説明
38:ファイル バージョン
39:製品名
40:製品バージョン

大きさ:2592 x 1944
*1:2592 ピクセル(大きさが「2592 x 1944」の時)
*2:1944 ピクセル(大きさが「2592 x 1944」の時)

*3:更新日時と、同じ?

注:項目の最後の「(ME)」は、同じ項目名で、MEにもある
  しかし、同じ内容を違う項目名で表示してるのもあるかも知れない
<6094> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月25日 金曜日 20時45分55秒
> と言う事で、IE を使ってブラウジングする限りクリップボード経由
> のデータ(重要情報)漏洩は十分に気を付けて下さい。 :-)

XP SP2 で一応試してみると、ローカルにおいた HTML だと実行の際に
ActiveX うんぬんの警告バーが出て実行確認が出る。で、Web 上に
おいた HTML だと ExecWB が使えないというか使い方がわからない!・・・ orz
リモートサイトからでは ExecWB は使えないようにできているのかな?
<6093> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月25日 金曜日 19時53分31秒
> ClipboadDate と同様に危険な事ではあるまいか!?

やっぱ簡単にできちゃいますね!
ClipOut.VBS にサンプルはあるわけですが・・・

と言う事は、IE はセキュリティの設定でいくら ClipboadDate を
使えないようにしても、クリップボードに対しては抜け道はある
わけで、IE を使う限りクリップボードに持っているデータは外部
からいつでも読まれてしまわれる可能性があるという事で、ここの
部分のセキュリティは無い状態なのですね! (-_-;

これだけ、マイクロソフト自身もセキュリティを厳しくしても
クリップボードに関してはデフォルトの状態で、スクリプトで制御
可能な状態なので、MS にしてみれば、これはあくまでも使用という
事なのでしょうけど!

と言う事で、IE を使ってブラウジングする限りクリップボード経由
のデータ(重要情報)漏洩は十分に気を付けて下さい。 :-)
<6092> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月25日 金曜日 19時28分54秒
> ExecWB を使う方法

しかし、ClipboadDate でなく ExecWB で、IE のメニューからの
操作を操って(「すべて選択」-->「コピー」)クリップボードに
データをコピーできるという事は、逆に貼り付けで任意のテキスト
ボックスにでも貼り付けてポストすれば良いだけだろうし?・・・
ClipboadDate と同様に危険な事ではあるまいか!?

ただ、セキュリティの設定による影響は受けないので使う側からは
使いやすいけど?
<6091> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月25日 金曜日 18時44分44秒
ちなみに、この FileList2Txt.VBS の作者である 吉岡 照雄さん の
作られた VBS の中には
http://www.vector.co.jp/vpack/browse/person/an010222.html
VBScript でクリップボードを操作するスクリプトがあります。

通常 VBScript でクリップボードを操作する場合は、
InternetExplorer.Application で ClipboadDate を使う場合が多い
ですが、これですとセキュリティ的に問題があり、インターネット
での危険性を考えると、デフォルトで使えるこの機能も設定で禁止
しないと危なすぎます。私も使えないようにしてあります。

なので、ClipboadDate を使う方法は問題ありなのですが、吉岡さん
は、この ClipboadDate を使わないで ExecWB を使う方法で、この
問題を回避されているようです。

これを使えば、「桐」と他のアプリでの連携をはかる場合、テキスト
ファイルに落としてお互いに読み書きするしか通常は無いと思います
が、クリップボード経由での連携もはかれそうでおもしろそうです。

ただ、これでネックとなりそうなのでは「桐」で扱える変数のサイズ
と言う事になりそうです! (;_;)
<6090> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月23日 水曜日 23時40分35秒
> あとは、適当に " " で括るようにするとか・・・

要は先の該当部分の StdOut.Write しているところで出力内容を
StdOut.Write """" & Folder.GetDetailsOf(,k) & """"
StdOut.Write """" & Folder.GetDetailsOf(FolderItem,k) & """"
と言うように " " で括り、そして、区切りの " " のところを
"," にしちゃうという事です。
<6089> re:JPG画像の縦長、横長を知る方法/たゆー 2005年02月23日 水曜日 23時34分03秒
>HPを見ているような2cmくらいの四角の枠に×が表示された状態になります
てきとうなことを書きました。
イメージ的にはそうだったのですが、実際は
1cm弱で「赤の■・緑の●・青の▲」でした

思いこみって、いいかげんですね(私だけかもしれませんが)

<6088> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月23日 水曜日 23時33分07秒
FileList2Txt.VBS の
140行目の Pad を外し、その2行下の " " を "," に
152行目の Pad を外し、その2行下の " " を "," に
変えたりすると、スペースが無くなり , (カンマ)区切りに
なるようです。あとは、適当に " " で括るようにするとか・・・
<6087> re:JPG画像の縦長、横長を知る方法/たゆー 2005年02月23日 水曜日 23時25分13秒

>FileList2Txt.VBS の
>28行目を Dim COL:COL=26
>122行目を For k=0 To COL Step 26
>なんてすると、ファイル名と画像サイズだけになるようですね
このへんわからないなりにも試してみます。どうもありがとうございます

しいて書けば、もし、ファイル名にスペースがあった場合かな?と
思ったりしています。

ところで、

>> xp sp2 で、ダウンロードできなく、昔のパソコンでダウンロード
>> しています。不自由・・・
>
>警告は出るけど、上のバーをクリックしてダウンロードの許可をして
>あげるだけだと思いますが・・・

「vector」のホームページにもそのように説明があります
私のパソコンも「XP-sp2」を導入したての頃はそうでしたが、
最近は、「上のバー」にエラーも出なく、まるで画像をアップされてない
HPを見ているような2cmくらいの四角の枠に×が表示された状態になります
たぶんどこかさわったのだろうと思うのですが不明です

<6086> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月23日 水曜日 22時40分08秒
FileList2Txt.VBS の
28行目を Dim COL:COL=26
122行目を For k=0 To COL Step 26
なんてすると、ファイル名と画像サイズだけになるようですね

CScript !FileList2Txt.VBS "D:\DATA\WEB\image" > filelist.lst
D:\DATA\WEB\image

名前 大きさ
21campaign_logo_1.gif 171 x 124
21logo_1.gif 380 x 108
21logo_2.gif 380 x 89
21logo_3.gif 380 x 70
aisatsu_pic.jpeg 217 x 208
aisatsu_pic.jpg 217 x 208
desktop.ini
fesmap_1_1.jpg 362 x 322
fesmap_1_2.jpg 337 x 322



> xp sp2 で、ダウンロードできなく、昔のパソコンでダウンロード
> しています。不自由・・・

警告は出るけど、上のバーをクリックしてダウンロードの許可をして
あげるだけだと思いますが・・・
<6085> re:JPG画像の縦長、横長を知る方法/たゆー 2005年02月23日 水曜日 22時16分21秒
hidetakeさん。いつも情報ありがとうございます
>FileList.VBS
>エクスプローラのファイルリスト(詳細)をテキストまたはHTMLにするVBScript
>http://www.vector.co.jp/soft/win95/util/se304363.html

先ほどダウンロードして試してみましたが
テキストの場合、ファイル名による「可変固定長」みたいな出力や、
html形式だと多少加工が必要かなとも思いました

まだ、2・3回しかテストしてませんが、これだと桐に組み込んで
みようかなと思いました

ps.
xp sp2 で、ダウンロードできなく、昔のパソコンでダウンロード
しています。不自由・・・
<6084> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月23日 水曜日 07時11分53秒
> WMI か VBS からエクスプローラの情報を取得する方法があると
> 思うけど、見つけられなかった。

FileList.VBS
エクスプローラのファイルリスト(詳細)をテキストまたはHTMLにするVBScript
http://www.vector.co.jp/soft/win95/util/se304363.html

と言う事で、上記スクリプトを使うとか、読めばエクスプローラからの
情報をテキストに落とす事も可能で、いろんなイメージファイルにも
(Windowsで対応する)対応可能でしょうね!
<6083> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月22日 火曜日 17時40分10秒
画像サイズの取得で、TIFF で探したら、

GetPicSize.pl
〜画像の横幅と縦幅を取得するサブルーチン〜
http://cachu.xrea.jp/perl/GetPicSize.html
http://cachu.xrea.jp/perl/archive/GetPicSize_pl

なんて言うのが見つかりました。

この辺を利用すれば、もっと良いかも!?
TIFF も扱いたかったら、この辺を移植しても・・・
<6082> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月22日 火曜日 16時24分01秒
> ktitle_c.vbs

BMP ファイルも簡単に処理できるので加えました。

対応するイメージファイルは JPEG / GIF / PNG / BMP で、
拡張子は .jpeg .jpg .gif .png .bmp に限ります。

使い方は cscript x:\path\ktitle_c.vbs y:\data\
と引数に一覧を取り出したいフォルダを指定します。サブディ
レクトリがあったら再帰的に検索し全部取り出します。
ファイルに落としたい場合は、取りあえず
cscript x:\path\ktitle_c.vbs y:\data\ > filelist
とリダイレクトして下さい。あとは、勝手に直接ファイルに
書き出すようにするのも手だと・・・

なお、cscript 経由で無く、wscript 経由なり直接実行して
しまうと、大量のファイルのダイアログが表示されるので
面倒な事になるでしょう! :-)

ktitle_c.vbs ( ex. cscript x:\path\ktitle_c.vbs y:\data\ )

ここには長すぎてアップできませんでした。で、下記に・・・

http://pub.idisk-just.com/fview/VL5uq6YszmreeeDtINFqZbZ4PxUVp2La2c9ET4RUO9xE2FTkXEM5GS1EZ85WZ22IRWhd0JGjzQs/a3RpdGxlX2M.vbs

<6081> Re:JPG画像の縦長、横長を知る方法/hidetake 2005年02月22日 火曜日 15時24分34秒
随分前に書いた桐関係のファイル情報の一覧を作る VBScript に
画像のサイズを表示するように加えました。

対応するイメージファイルは JPEG / GIF / PNG で、拡張子は
.jpeg .jpg .gif .png に限ります。

使い方は cscript x:\path\ktitle_c.vbs y:\data\
と引数に一覧を取り出したいフォルダを指定します。サブディ
レクトリがあったら再帰的に検索し全部取り出します。
ファイルに落としたい場合は、取りあえず
cscript x:\path\ktitle_c.vbs y:\data\ > filelist
とリダイレクトして下さい。あとは、勝手に直接ファイルに
書き出すようにするのも手だと・・・

なお、cscript 経由で無く、wscript 経由なり直接実行して
しまうと、大量のファイルのダイアログが表示されるので
面倒な事になるでしょう! :-)

ktitle_c.vbs ( ex. cscript x:\path\ktitle_c.vbs y:\data\ )

ここには長すぎてアップできませんでした。で、

・・6082参照下さい・・

<6080> Re:#未定義値変換/原山 2005年02月22日 火曜日 12時44分16秒
>実際は undef $i; でも同じで、変数そのものが存在しなくなってしまいますよね。。。
私がハッシュの検査をするときの現在の手法です。
if ($test{'a'}) { print "$test{'a'}\n"; }
elsif ($test{'a'} eq '0') { print "変数の値は 0 です\n"; }
elsif (exists $test{'a'}) { print "変数は未定義値で存在します\n"; }
else { print "変数そのものが存在しません\n"; }

undef $test{'a'};
if ($test{'a'}) { print "$test{'a'}\n"; }
elsif ($test{'a'} eq '0') { print "変数の値は 0 です\n"; }
elsif (exists $test{'a'}) { print "変数は未定義値で存在します\n"; }
else { print "変数そのものが存在しません\n"; }

undef EXPR
この関数は、EXPRを未定義にする。(プログラミングPerlより)

E-Mail

<6079> Re:#未定義値変換/うにん 2005年02月22日 火曜日 10時38分47秒
「変数を代入ステートメントで使用するだけで、変数を暗黙的に宣言できます。
暗黙的に宣言された変数は、すべてバリアント型 (Variant) になります。」
「プロシージャの実行が開始されるとき、すべての変数が初期化されます。」
「バリアント型 (Variant) 変数は、Empty 値で初期化されます。」
「Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の
変数を示します。Empty 値を含むバリアント型の変数は、数値データと共に使われる
ときは 0、文字列データと共に使われるときは長さ 0 の文字列 ("") として扱われます。」
「Empty 値を Null 値と混同しないでください。Null 値は、バリアント型変数に
有効なデータが意図的に格納されていないことを示します。」
なので、微妙に違うようです。

桐の場合は変数宣言が必要なので、これでいえばEmpty値というのはなくて
Null値に初期化されると考えればいいかな?
Perlでは $i=undef; だと見た目はundef(Empty)を代入するような書式ですが、
実際は undef $i; でも同じで、変数そのものが存在しなくなってしまいますよね。。。
(これはちゃんと perl -d の X i で確認しました。)
<6078> Re: <6077>/ド・モ・ONnoji 2005年02月22日 火曜日 10時01分07秒
>エクセル(のVB)マクロでは、

VBAには VarType関数というのがあるそうですが…
的外れかも(^^ゞ

<6077> re:#未定義値変換/たゆー 2005年02月22日 火曜日 06時53分45秒
perlではないですが、エクセル(のVB)マクロでは、

Sub Macro1()
MsgBox i + 1, , "未定義値"
End Sub

これで、1が表示されますね
このときの「i」は、未定義だろうか?
<6076> re:#未定義値変換/うにん 2005年02月22日 火曜日 00時26分45秒
あはは〜T_T
-pは-wと全然関係なかったし、ものすごい詭弁を弄してしまいましたね>_<
調べないで書くものじゃないなあ。原山さんに感謝。
Javaみたいに代入できる値としてNULLがあるもんだと思ってしまいました。

ちなみにPL/PerlのドキュメントにNULLを返したいときはUndefを返しなさい、と
書いてありましたあ。
<6075> Re:#未定義値変換/原山 2005年02月21日 月曜日 21時51分10秒
use strict;
my $i;
を使っているなら、
$i=NULL;
print "i=$i\n";
$i="NULL";
print "i=$i\n";
$i=undef;
print "i=$i\n";

E-Mail

<6074> Re:#未定義値変換/原山 2005年02月21日 月曜日 20時48分04秒
>Perlの場合NULLとUndefined(uninitialized?)は違うので、むしろこうでしょうか。
>$ perl -w
>$i=NULL;
>print $i+1;
これは うにんさんの誤解です。
$i=NULL;
print "i=$i\n";
$i=undef;
print "i=$i\n";
これをお試しください。

E-Mail

<6073> Re>kevの共用 /悲しげ 2005年02月21日 月曜日 20時31分39秒
Mr.bonito wrote

>余計な事だったかも知れませんが一応100%ではないぞ...という事で (^^;

ほうほう、kevの共用を勧める発言は、私が散見した(または記憶している)
限りでは、ネット上で初めて見ました。よって、100%改め99%とします。

ただし、私は先にも書いたように、自分では注意して使っていますが、
他人様には、やはり勧めませんです。(^^;)

<6072> Re:#未定義値変換/うにん 2005年02月21日 月曜日 17時31分56秒
Perlの場合NULLとUndefined(uninitialized?)は違うので、むしろこうでしょうか。
$ perl -w
$i=NULL;
print $i+1;
Argument "NULL" isn't numeric in addition (+) at - line 2.
1

ここで代入しているNULLは文字列ではないというのは、以下と比較するとわかります。
$i=null;
Unquoted string "null" may clash with future reserved word at - line 1.

でもPerlも桐に似て、NULLを文字列扱いにすると警告なしに自動変換が働いてしまい、
「SQL文の結果からだと見分けがつかないということ」になってるようですね。

perl -p だと文字列連結してもNULLが"NULL"にならないようです。
<6071> Re#6015:JPG画像の縦長、横長を知る方法/hidetake 2005年02月21日 月曜日 14時04分55秒
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=logview_html&no=121#6015

しくしく・・・ (;_;)
どうも、正しくサイズを返す画像とそうでない画像があると思って
調べてみると、ファイルの最初から FFC0 もしくは FFC1 FFC2 FFC3
の何れかを探して処理するだけでなく、ちゃんとヘッダ情報から
格納サイズを調べて、違ったら読み飛ばす処理が必須でした。 (^_^;

なので、結局、最初の perl のようなルーチンにしなければならない
ようです。

GetSizeJpeg.vbs  ( ex. GetSizeJpeg.vbs x:\path\image.jpeg )
' -----------------------------------------------------------------------------
Option Explicit
Dim Arg, File
Set Arg = WScript.Arguments

If Arg.Count < 1 Then
    WScript.Quit
End If

File=ARG(0)

On Error Resume Next
If Not IsNull(File) Then
  Dim Stream, _
      Data1, Data2, Data3, Data4, Data5, _
      DataX, DataX1, DataX2, _
      DataY, DataY1, DataY2
  Set Stream = WScript.CreateObject("Adodb.Stream")
  Stream.Type = 1
  Stream.Open
  Stream.LoadFromFile File
  Data5 = Stream.Read(2)
  Do while not Stream.EOS
    Data1 = Stream.Read(1)
    Data2 = Stream.Read(1)
    Data3 = Stream.Read(1)
    Data4 = Stream.Read(1)
    If (AscB(Data1) = &HFF) Then
      If ((AscB(Data2) >= &HC0) And (AscB(Data2) =< &HC3)) Then
        Data5  = Stream.Read(1)
        DataY1 = Stream.Read(1)
        DataY2 = Stream.Read(1)
        DataX1 = Stream.Read(1)
        DataX2 = Stream.Read(1)
        DataX = AscB(DataX1) * &H100 + AscB(DataX2)
        DataY = AscB(DataY1) * &H100 + AscB(DataY2)
        Exit Do
      Else
        Data5 = Stream.Read(AscB(Data3) * &H100 + AscB(Data4) - 2)
      End If
    End If
  Loop
  Stream.Close
  Set Stream = Nothing
End If

If (DataX + DataY) Then
  WScript.Echo DataX & " , " & DataY
Else
  WScript.Echo "This is not Jpeg File."
End If
' -----------------------------------------------------------------------------
<6070> Re:#未定義値変換/原山 2005年02月21日 月曜日 13時21分55秒
>NULLという値がある場合、「何も無い」とは違うのです。
>「何もない。」でなくて「わからない。」ですね。

やっと私の頭の整理がついてきました。
>もうよした方がいいのかな^^; まさに「イメージにずれ」でしょうね。
今少しお付き合いください。

以下 perl の参考書の抜粋・web の検索結果の抜粋です。

# 何も値がないという状態を未定義であると言う。
#
# null
# これはPerlで言う未定義(何も無い状態)を指します。
#
# undefined
# 特別な値で、通常変数にまだ値が設定されていない
# ことを示すために用いられます。
#
# ところで、「NULL」とは何でしょうか?
# これは、「データがない」もしくは「未定義」
# であることを表す単語です。
# ただし、注意しなくてはいけないのは、
# 本当に文字列として「NULL」と登録されているのか、
# 「未登録」であることの「NULL」であるのかは、
# SQL文の結果からだと見分けがつかないということです。
# NULLは「値ではない」ということには、十分注意する必要があります。

perl の場合
# test.pl
############
use strict;
my $i;
$i=$i+1;
print $i;

D:\K3\Data\send3\pl>perl -w test.pl
Use of uninitialized value in addition (+) at test.pl line 5.
1

# test.pl
############
use strict;
my $i;
$i=$i . "abc";
print $i;

D:\K3\Data\send3\pl>perl -w test.pl
abc

桐の場合
変数 数値{&i}
&i=&i+1
確認 #str(&i) → ""
変数 文字列{&i}
&i=&i+"abc"
確認 &i    → abc

>SQLでは未定義(NULL)文字列に何かを連結すれば未定義になります。

以上から私が到達した結論
# 何も値がないという状態を未定義であると言う。
# それぞれの言語によって未定義の扱いが違う。
# よって、それぞれの違いを把握した上で処理する。
あたかも桐の未定義に対する考え方がおかしいと
受け取られた発言に対しては謹んで撤回させて
頂きます。

E-Mail

<6069> Re>kevの共用/bonito 2005年02月21日 月曜日 11時53分10秒
悲しげさん wrote
>私も、ド・モ・ONnojiさんと同じく、たとえ100種類近くあろうとも、
>それぞれにkevを設定した方が、断然管理しやすいと思います。
>私の乏しい経験でも、kevの共用はとても難しかったし、他の皆さんの
>ご意見でもkevは共用しない方がよいとの意見が100%だった記憶があり
>ます。

済みません、私はKev共有派です (^^;
余程特殊な場合以外は一つのまとまった処理には一つのKevで済ませて
います、例えば売上を立てる処理、入金を確認入力する処理、その処理
のそれぞれに(アクセスでない今の桐では)メインとなるwfm(メイン&サブ
フォームの意味ではないです...ややこしい)と幾つかのサブ的なあるい
はポップアップ的なwfmを別々に作成保存しておくと思いますが、その
ひとまとまりのwfm群には一つのkevと決めています。

私(個人)としては100個のwfmに100個のkev(しかも中には10数行だけの
もある)を管理するより上記のような方法の方が管理しやすいと思って
そうしています。大昔の一太郎みたいに内面(OS)的にはテキストファイル
と属性ファイルだが一太郎からのファイル操作だと一つのファイルとして
扱う...みたいな仕組みだったら私も今のようにしたかどうか?とは思い
ますが...

余計な事だったかも知れませんが一応100%ではないぞ...という事で (^^;

<6068> Re:#未定義値変換/うにん 2005年02月21日 月曜日 10時23分50秒
もうよした方がいいのかな^^; まさに「イメージにずれ」でしょうね。
>何も無いところにリンゴ1個持ってきました
これは未定義(NULL)+1ではないのです。
NULLという値がある場合、「何も無い」とは違うのです。
「リンゴの個数」として「何も無い」のであれば0であるということです。

>未定義値である何もない。という答えが素朴に疑問なのです。
「何もない。」でなくて「わからない。」ですね。
いくつあるかわからないところに1個持ってきたので合計もわからないのです。
<6067> Re:HITACHI 2050/ド・モ・ONnoji 2005年02月21日 月曜日 10時00分07秒
>昔の話ですが、「HITACHI 2050」というパソコン?が、ありました

懐パソオンライン
http://openlab.jp/kitaro/natsupaso/

そのほかのメーカー&種々編(18機種)(アンティークを除く)
http://openlab.jp/kitaro/natsupaso/OTHERS/

<6066> Re:マウスの中央の・・・/hidetake 2005年02月21日 月曜日 09時48分46秒
> 昔の話ですが、「HITACHI 2050」というパソコン?が、ありました
> たぶん高かったと思いますが、全国に配置されました
> ほとんど使用する人は少なかったと記憶しています

懐かしいですね! 私も 2050 はさわった事があります。
2050 は UNIX機だったですよね。

昔、私の部署には無く隣の技術課にあったので、たまに
少しだけさわって遊んでいました。
私のところのは 2020 もしくは、その前進の機種で DOS
な機種だったです。



時代は流れてそれよりずっとあと、普通のパソコンにも
マウスが付きだした時代、講習会を引き受けて「ハイ!
マウスを持って・・・」と言ったら、何人か手のひらの
上にマウスを持っている人がいて・・・、唖然と言うか、
そのあとみんなで大笑いした事もありましたね・・・
<6065> re:マウスの中央の・・・/たゆー 2005年02月20日 日曜日 22時46分45秒

昔の話ですが、「HITACHI 2050」というパソコン?が、ありました
たぶん高かったと思いますが、全国に配置されました
ほとんど使用する人は少なかったと記憶しています

でも、高い分、印刷等もきれいでした・・・そのときの話です。が、

操作を説明しているとき
・マウスアイコンを画面の上方へ運ぶのに、マウスを空中へ高く
あげてるいる人がいました。

そのときは、「何でわからないのだろう」と思いましたが

実際は、マウスカーソルの位置を、画面の上方にあげるのに
口では「前の方に移動して」とはいわなかったような記憶です

はっきりは覚えてませんが「マウスを上に、あげて」といってたかも

<6064> Re:#未定義値変換/hidetake 2005年02月20日 日曜日 22時22分20秒
> ここの掲示板でも通常の足し算(+)やき算(-)も結構使って
> いたりまします。 (^^;

ちなみに、単純なインクリメントで使っているという意味では
なく、ログ数や表示行数などで、+1 と言う意味ではなく、
それ以外の値と加算減算させている場面があるという意味です。

通常の項目の足し算なども一緒(の考え)だと思います。
<6063> Re:#未定義値変換/hidetake 2005年02月20日 日曜日 22時14分41秒
> perl で $i+1 はまず使わないので気が付きませんでした。

ここの掲示板でも通常の足し算(+)や引き算(-)も結構使って
いたりまします。 (^^;
<6062> Re:#未定義値変換/hidetake 2005年02月20日 日曜日 22時09分55秒
> で結局 perl の場合 ++$i ではエラーにならないけれど
> $i=$i+1; では警告がでるようです。

perl の場合は、通常の演算子と違ってインクリメント・デクリメントだけは
特殊な動きと言うか、未定義値に対してもエラーは出ないようですね。

まぁ〜、今回のは + や + や * や / を主に対象とした話だとは思いますが?
<6061> Re:#未定義値変換/原山 2005年02月20日 日曜日 22時06分53秒
++$i
$i+1

なるほど
perl で $i+1 はまず使わないので気が付きませんでした。

未定義の夢を見そう・・・
おやすみなさい。

E-Mail

<6060> Re:#未定義値変換/hidetake 2005年02月20日 日曜日 21時55分36秒
しまった! 先に Windows の perl でやったのですが

Windows 上の perl v5.8.6 ではモジュールが無い環境なので
$i=$i+1 すれば・・・

x:\>c:\bin\perl -v
This is perl, v5.8.6 built for cygwin-thread-multi-64int
Copyright 1987-2004, Larry Wall
・・・

x:\>c:\bin\perl -w test.pl
Use of uninitialized value in addition (+) at test.pl line 2.
1

となります。

test.pl
-------------------
#!/usr/bin/perl
$i=$i+1;
print $i;
-------------------

で、先の Linux 上のは $i=$i+1; を抜くのを忘れていました。

で結局 perl の場合 ++$i ではエラーにならないけれど
$i=$i+1; では警告がでるようです。

<6059> Re:#未定義値変換/hidetake 2005年02月20日 日曜日 21時46分33秒
手元の Linux 上の perl v5.6.1 では

# perl -v
This is perl, v5.6.1 built for i386-linux
Copyright 1987-2001, Larry Wall
・・・

#perl -w test.pl
Use of uninitialized value in addition (+) at test.pl line 3.
2

test.pl
-------------------
#!/usr/bin/perl
use strict;
my $i;
print ++$i;
-------------------
<6058> マウスの中央の・・・/たゆー 2005年02月20日 日曜日 21時09分59秒
皆様のはなしが盛り上がってるのに、別の話題で恐縮ですが

マウスの「右」と「左」のクイックの間にある、
コロコロ(ホイールというのかも知れない)がありますが
古いNECのパソコンに接続していたマウスを発見しました

それは「コロコロ」でなく、「レバー」でした
画面を「上下」に動かすのに、その中央のレバーを「前倒し・後倒し」
するだけでいいです

この方が楽ですね。

ちなみにこれを使用しても、フォームでスクロールはしません

<6057> Re:#未定義値変換/原山 2005年02月20日 日曜日 20時52分18秒
桐では割り切るしかない問題にこれ以上
コメントするのもとは思いつつ

# test.pl
############
use strict;
my $i;
print ++$i;


X:\pl>perl -wc test.pl
test.pl syntax OK
という具合に何も文句は言われません。

変数宣言を省略すると
Name "main::i" used only once: possible typo at test.pl line 1.
この1文は追加されますけれども・・・

>(0でもどんな数値でもない値を扱うために未定義値というのが存在するのです)
このご意見には何の異論もありません。

何も無いところにリンゴ1個持ってきました
さて今リンゴはいくつあるのでしょう?
これに対して
未定義値である何もない。という答えが素朴に疑問なのです。
リンゴはどこに消えてしまうのでしょうか?

多分みなさんがご存知の未定義と私がイメージしている
未定義にズレがあるのでしょう。
最近、特にこの未定義と0の区別をしなければならない
処理が多かったので、過剰反応しております。
もうこの問題はここらで打ち止めとさせていただきます。
失礼しました。

E-Mail

<6056> Re>kevの共用 /悲しげ 2005年02月20日 日曜日 19時06分46秒
>>100種類近いフォームを使用している為、そえぞれに「kev」を設定しては
>>管理し辛くなると思い、

>従って、フォーム( .wfm )とイベント( .kev )は一対一にする方が管理しやすいと思います。

私も、ド・モ・ONnojiさんと同じく、たとえ100種類近くあろうとも、
それぞれにkevを設定した方が、断然管理しやすいと思います。
私の乏しい経験でも、kevの共用はとても難しかったし、他の皆さんの
ご意見でもkevは共用しない方がよいとの意見が100%だった記憶があり
ます。
一番レレレ状態になるのは、「名札 メイン」や「フォーム開始」イベ
ント等が、文字通り共通して実行されてしまうことですね。これには、
心底悩みましたです。(;_;)
あと、「レコード移動」とか他の全てのイベントについても同様の可能
性がありますけどね。その辺りを十二分に検証した上でなら、共用も便
利ですけど(管理は難しいが)。
とは云いつつ、kevの共用を実験的に試したことがあります(^^;)。
あまり複雑なイベントは使わず、地雷を踏まないように単純な処理だけ。
以下その一例。

名札 メイン
 var 固有,文字列{&wfmF,・・・}
 var 局所,長整数{&キー}



手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 var 文字列{&使用フォーム名,&obj}
 ウィンドウ情報取得 &hwindow,フォーム名=&使用フォーム名
 &wfmF=#ファイル名(&使用フォーム名,2)
 &obj=#cond(&wfmF="某1","t某1",&wfmF="某2","t某2",&wfmF="某3","t某3",・・・)
 method &obj.フォーカス設定()
 method @フォーム.更新モード設定(2)
手続き定義終了

手続き定義開始 t某1::ソース値更新()
 if(&wfmF="某1" .and &キー=13)
  method @フォーム.更新モード設定(0)
  call 確定終了()
 end
手続き定義終了

手続き定義開始 t某2::ソース値更新()
 if(&wfmF="某2" .and &キー=13)
  method @フォーム.更新モード設定(0)
  call 確定終了()
 end
手続き定義終了

<6055> Re:<6054>/ド・モ・ONnoji 2005年02月20日 日曜日 17時49分51秒
TOMさん、こんにちは。

>現在のVER5では4種類のプログラムで
>100種類近いフォームを使用している為、そえぞれに「kev」を設定しては
>管理し辛くなると思い、○.cmd、△.cmd、◇.cmd、☆.cmdそれぞれに
>○.kev、△.kev、◇.kev、☆.kevを対応させるようにしました。

私は一括処理は利用しないので、よく分かりませんが、
イベント処理( .kev )は、フォーム( .wfm )の部品と考えるのが良いと思っています。
従って、フォーム( .wfm )とイベント( .kev )は一対一にする方が管理しやすいと思います。

しかし、共通の機能はライブラリ( .cmd )化して、
イベント( .kev )の冗長を少なく出来る可能性はあると思います。
※[名札 メイン]で[ライブラリ]コマンドを使えば可能です。

>この動きの中で1,2回だったと思うのですが「プログラムの構造に・・・」と
>エラーメッセージが(無視すると動いたのですが)出た事があるのですが、
>私のしている方法って、ひょっとするとまずいのでしょうか?

桐の原因でこのメッセージが表示されるのか?、
あるいは、
本当にプログラムの構造に矛盾があるように動作するようになっているためなのか?
どちらとも不明です。

[トレース出力]ウィンドウにトレース結果を出力して、
結果をメモ帳などに貼り付けると、発生箇所を特定できると思います。
※宣伝めいてしまいますが、拙作で整形すると見やすくなりますよ。(^^ゞ

それから、以後ハンドル名の"様"付けはご勘弁ください。

<6054> to ド・モ・ONnoji様/TOM 2005年02月20日 日曜日 14時20分27秒
丁寧なご指導ありがとうございました。
おかげさまで、上手く行きました。

"メイン"部分で &STR = "○×△.tbl" が出来ずに
悩んでいたのですが、一括処理側で設定出来ました。

上記内容にも関係するのですが、現在のVER5では4種類のプログラムで
100種類近いフォームを使用している為、そえぞれに「kev」を設定しては
管理し辛くなると思い、○.cmd、△.cmd、◇.cmd、☆.cmdそれぞれに
○.kev、△.kev、◇.kev、☆.kevを対応させるようにしました。

一括処理からフォームを立ち上げる時、"ウインドウ情報取得"で
そのフォーム名を格納し、イベントハンドラ内で"switch"を使い
対象フォームの処理内容を集めた手続きに分岐するようにしました。
で、メインには"&STR"を設定しづらかったのです。

この動きの中で1,2回だったと思うのですが「プログラムの構造に・・・」と
エラーメッセージが(無視すると動いたのですが)出た事があるのですが、
私のしている方法って、ひょっとするとまずいのでしょうか?

<6053> Re:#未定義値変換/hidetake 2005年02月20日 日曜日 12時22分24秒
何か書いていらっしゃる事にも矛盾があるような気もします。

> ただ私が納得できないのは、
> 未定義値はあくまで未定義値であって
> 表の定義で0か未定義を選ぶのは変である。
> もっと言えば未定義と0は別物である。
> 極端に言えばこれに尽きます。
> 私が一番好きなperlではこの点の区別が
> 明確です。

>&i=""
>&i=&i+1
>これが未定義を返すのも
>あれれ・・・
>いうのが私の実感です。

perl の場合、これは 1 を返すのでしょうが、区分が明確で
あれば、未定義を返すのが正しいのだと思います。
でも、曖昧な事も柔軟に処理してくれる perl は 1 を返すの
でしょうが、それも perl -w で実行すると、そんな計算式
おかしいですよって警告をも出してくれると思います。

<6052> re:#未定義値変換/うにん 2005年02月20日 日曜日 11時53分13秒
>&i=""
>&i=&i+1
>これが未定義を返すのも
>あれれ・・・
>いうのが私の実感です。

これは「思い込みがおかしい」としか言いようがないかも?
数値なのですから「なにも存在しない」(というか、足しても値が変わらない)のなら
未定義にする必要がなく0を代入すべきなのでは?
(0でもどんな数値でもない値を扱うために未定義値というのが存在するのです)

文字列の場合は桐では未定義と長さ0を区別できないので話がややこしくなりますが、
SQLでは未定義(NULL)文字列に何かを連結すれば未定義になります。
<6051> Re:#未定義値変換/hidetake 2005年02月19日 土曜日 23時50分41秒
> ふつうそんなものだと思います。

これは、だから #未定義値変換 関数や nvl()関数、nz()関数、
IsNull() があって、それを使ってちゃんと処理するのがふつう
だと言うことだと思います。

桐の #未定義値変換 関数は、先にも出ていましたが、桐の最初
の時代にはこれは無く、表に「未定義項目値処理」の設定が
あって、それを工夫して使っていたわけですが、#未定義値変換
関数ができてほかの DB やアプリと同等になって、めんどくさい
#cond 使わなくとも一発で処理できるようになって、「未定義
項目値処理」の有意義性はある意味で薄れたと思います。

なのに、印字コマンドではこれが亡霊のように関係してくるので
困ったことになったと言うことだと思います。

Copyright (C) 2000 CGI Arkadia All rights reserved.
Script written by Shintaro Wakayama.
BBS-TypeN Ver.2 Preview4
remodel advice by hidetake