[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/19 09:09 / Filesize : 210 KB / Number-of Response : 969
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

WSH(・∀・)スレッド! Part 4



1 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 01:22:48 ]
( ´ゝ`) 誰か詳しい情報キボンヌ

●過去スレ
WSH(・∀・)スレッド!
pc11.2ch.net/test/read.cgi/tech/1055075469/
WSH(・∀・)スレッド! Part 2
pc11.2ch.net/test/read.cgi/tech/1176698934/
WSH(・∀・)スレッド! Part 3
pc12.2ch.net/test/read.cgi/tech/1208948450/

●関連スレ
お前ら、wsh使ってますか? Part7
pc12.2ch.net/test/read.cgi/win/1190548945/
HTAをもっと流行らせる計画 Part2
pc12.2ch.net/test/read.cgi/tech/1220874815/
★WSHでCGI★JScriptVBScript
pc11.2ch.net/test/read.cgi/php/1059745064/

●公式サイト
Windows Script
www.microsoft.com/japan/msdn/scripting/

●個人サイト
Windows Scripting Host
homepage3.nifty.com/aya_js/wsh/index.htm
Windows Scripting Host Laboratory
www.roy.hi-ho.ne.jp/mutaguchi/wsh/
Windows Script Wiki
winscript.s41.xrea.com/wiki/index.php

152 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:37:40 ]
すみません
detail.chiebukuro.yahoo.co.jp/qa/question_detail.php?qid=1131686451
この答えを教えていただけないでしょうか
よろしくお願いします

153 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:32:38 ]
>>152
取得順はソートされない(詳細はFATやNTFSの構造の話になるので省略する)
取得したデータを自前でソートしろ

154 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:50:19 ]
>>152
自前ソートが面倒であれば以下のとちらかで手抜きしろ
・ソート指定したdirコマンドの結果を使う
・basp21のReadDirを利用する

155 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:01:18 ]
>>153-154
ソートするには取得してからでないとダメということですね
ありがとうございます

取得するフォルダの順番というものは決まっているのでしょうか?
対象のフォルダに
20090101
20090102
20090201
20090202
とこのような感じでサブフォルダがありまして
フォルダが読み込まれる順番を調べているのですが
どうも情報がうまくさがせないものでして
echoなどで出しておりますとおそらく昇順だとは思うのですが
明示的にできないか・もしくは昇順であることを裏付ける何かがないかと思いまして

156 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:12:55 ]
ループの処理のあとにsleep10000くらい入れて
処理フォルダ見とけばいいんじゃない?

157 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:19:53 ]
>>155
FATに関して言えば情報格納順であり
ファイルやフォルダ削除/作成により順番が変わる
NTFSについても確実に名称でソートされている訳ではない
環境依存にしたくなければソートしろ

158 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:24:42 ]
>>156-157
ありがとうございます
複雑な内部の問題なんですね…
ソートしてから使いチアと思います。
本当に助かりました

159 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:12:04 ]
横レスですが、
みなさんソートはどうしてますか?
バブルソートが楽ですけど、量が増えると遅くて重くて。
エクスプローラがどんなに大量のファイルがあっても一瞬でソートできるように、
何か便利な方法ないでしょうか?

160 名前:159 mailto:sage [2009/10/13(火) 00:16:54 ]
すんません、>>154で出てた・・・



161 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:32:29 ]
JSciptのArray.sort()でええ

162 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:41:58 ]
CreateObject("System.Collections.SortedList")

163 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:16:19 ]
>>21-25
keybd_eventでシフトキー押しながら
invokeverb "delete"
すればよいよ

164 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:10:28 ]
質問です
vbsで特定ページのソースを取得し、X行目がYという内容と一致するかのチェックをするスクリプトを作りたいのですが
ソース全体を出力する方法はobjIE.Document.Body.InnerHtmlでできるのは分かったんですが
ソース全体の閲覧ではなくソースのX行目がYという文字列と一致するかどうかの分岐を作るのはどうすればいいのでしょうか?

165 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 21:42:02 ]
>>164
ネタ? どこまで理解できていないのか読み取れない・・・

InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
Mid系関数でX行目のデータを取得
If文で分岐

当然ループは使うぞ

166 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:00:09 ]
>>165
分かりにくくてすみません
>InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
>Mid系関数でX行目のデータを取得
ここが分かりませんでした

もう少し調べてみます

167 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:58:40 ]
俺ならXMLDOMで全体取ってから
\nでsplitするかな。

168 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:21:37 ]
StrBody = objIE.Document.Body.InnerHTML
lntPos = InStr(1, StrBody, Chr(13), 1)
これの戻り値がどうやっても0になってしまいます
対処法お願いします

169 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 15:46:51 ]
Chr(13)?

170 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 15:54:55 ]
>>169
段落コードのつもりなんですが



171 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 16:38:05 ]
Chr(10)

172 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:26:14 ]
段落コード?

173 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:33:14 ]
HTMLにおける「段落」をめぐって
ttp://www.asahi-net.or.jp/~WQ6K-YN/para.html

174 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 18:32:24 ]
ソース?

175 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 19:13:38 ]
>>170
HTMLの段落はそっちでしたか
InStrが返す値が明らかに存在する文字を検索しても0になってしまうのはStrBodyが長すぎるせいなのでしょうか?
長さ制限は無いはずだしStrBodyをためしにechoで出力してみたらちゃんと表示されてるのでStringは収納されてるはずなんですが

>>167
ちょっとこちらも調べて見ます

176 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 21:58:26 ]
>長すぎるせいなのでしょうか?
それはない
>InStrが返す値が明らかに存在する文字を検索しても0になってしまう
それもない

177 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:21:28 ]
>>176
無いはずなのは分かってるんですけどなぜかそうなってしまうんです
ためしにVBで>>168のIntPosをMsgBoxで出力しようとしてもなぜか0に


178 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 01:02:57 ]
すみません
IntPos = の部分がうまく変数として認識されていなかったのが問題だった見たいです
解決しました

179 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:02:37 ]
意味不明だが
on error resume next
でも使ってんのか?やめとけ
option explicit
は使っとけ

180 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:17:29 ]
ttp://d.hatena.ne.jp/hasegawayosuke/20091028/p1



181 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 15:03:31 ]
いみふ
結局使えないんだろ?

182 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 20:01:43 ]
以前は
cscript //e:jscript -
が使えたが

183 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:00:30 ]


>cscript //e:jscript -
WScript.Echo(WScript.Version);
^Z
5.7

184 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 15:42:09 ]
>cscript //e:jscript -
入力エラー: スクリプト ファイル "-" が見つかりません。

185 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:05:32 ]
>cscript //e:jscript con
WScript.Echo(WScript.Version);
^Z
5.7

186 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 12:03:39 ]
レンホウ「こんなロボット作って、なんになるんです?」

187 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:04:00 ]
ロボットになるんです

188 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 17:39:05 ]
>cscript //e:jscript con
CScript エラー: Windows Script Host の実行に失敗しました。 (この操作を完了するの
に十分な記憶域がありません。 )

189 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:47:24 ]
純粋なあの頃は仕事で追い詰められて自殺なんて都市伝説だと思ってたけど
今じゃ知り合いの失踪も自殺も体験した

190 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 10:59:46 ]
正規表現が文法的に正しいかどうかを判別する方法はありませんか
括弧が足りないとか教えてくれなくていい
スクリプトが異常終了しないでtrueかfalseを返してくれればいい



191 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 18:48:37 ]
try catch

192 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:26:27 ]
>>191
駄目だった
try {var re = /asd(fgh/;}
catch(e){WScript.echo("error");}

193 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:36:59 ]
RegExp.compile

194 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:58:42 ]
>>192
RegExp

195 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:05:02 ]
wshで
var n=/a]b/;
と打ったらエラーが出ませんでした。他の括弧ならエラーが出ます。
エスケープ無しの右かぎ括弧ってなにか特別な意味はありますか?
この場合は、"a]bと続く三文字"と解釈して大丈夫なんですか?

196 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:20:01 ]
ためせば?

197 名前:デフォルトの名無しさん [2009/12/13(日) 13:23:44 ]
Excel2003と2010が共存している環境で
WSHを使うことで両者を使い分けようとしています。
参考 : www.drk7.jp/MT/archives/001226.html

RegRead("HKEY_CLASSES_ROOT\\CLSID\\{00024500-0000-0000-C000-000000000046}\\LocalServer32\\").replace(/ \/[^ \/]+/g, '')
で、Excel 最新版(最後にインストールしたもの?)のパスは得られるのですが、古い方のパスを得られません。

何か良い方法はないでしょうか?

198 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:24:56 ]
今は決めうちで、「C:\Program Files\Microsoft Office\*\EXCEL.EXE」の * の部分を変えて存在確認をとって処理しています。
* の部分は、
Office2010 : office14
Office2007 : office12
Office2003 : office11
Office2002 : office10
Office2000 : office9
Office97 : office8
Office95 : office
であっているでしょうか?
よろしくお願いします。

199 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 19:27:38 ]
ttp://support.microsoft.com/kb/234788/ja

200 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:19:27 ]
EXCEL.EXEを検索してFileVersionで判定すべき



201 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:00:12 ]
Office2010ってもう発売されてるんだ.....

202 名前:デフォルトの名無しさん [2009/12/23(水) 14:44:53 ]
さあ

203 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:50:06 ]
office13は?

204 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 09:35:19 ]
スレちがい

205 名前:デフォルトの名無しさん [2010/01/13(水) 18:31:33 ]
お願いだから教えてください。スレ違いかも知れないけどPower Shellスレないみたいだし・・

Windows Power Shell(2.0)でIEを起動してマウスクリックをエミュレートさせようとした場合、Win32API(mouse_event)を使うと思うんですが
DllImport("usr32.dll",Charset=Charset.Auto)でCharset = ←の=の後がどうとかいって、実行できません。Charsetのくだりを全削除すると今度は予期しない属性と出てしまいます。

mouse_eventにこだわりはないんですが
IEを立ち上げ
マウスクリックをエミュレートする

処理を教えてください。APIなら宣言部もお願い;;



206 名前:デフォルトの名無しさん [2010/01/13(水) 18:37:51 ]
205ですけど

座標とかハードコーディングで大丈夫ですので肝を簡潔にお願い;;


207 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 23:40:26 ]
スレちがい
Windows PowerShell 2.0 Part2

208 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 00:07:23 ]
普通はDOM使うんじゃなかろうか、いや知らんけど

209 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 02:56:55 BE:1403990069-PLT(23400)]
>>207
URLも貼ってあげなよ

pc12.2ch.net/test/read.cgi/win/1261106064/

210 名前:デフォルトの名無しさん [2010/02/22(月) 21:41:34 ]
次のように Folderオブジェクトの SubFolders でFolderコレクションを取得したとして、

 Set c = folder.SubFolders

これを For Each ではなくて以下のように For で処理したいです。

 For i = 0 To c.Count
  :
 Next

このループの中で、i 番目のアイテムを取得するにはどうしたらよいでしょうか?
c(i) でも c.Item(i) でもダメでした。




211 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:44:18 ]
c.Items(i)

212 名前:210 mailto:sage [2010/02/22(月) 21:50:27 ]
それだと
オブジェクトでサポートされていないプロパティまたはメソッドです。:'c.Items'
です。
ちなみに、c.Item("Test") みたいに、実在するフォルダ名を与えればフォルダオブジェクトは取って来れます。
それじゃ意味無いですが。


213 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:06:18 ]
c(i).Value
c(i).Item()

214 名前:210 mailto:sage [2010/02/22(月) 22:17:28 ]
>>213
プロシージャの呼び出し、または引数が不正です。


215 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 23:29:43 ]
Shell.Application の FolderItems のほうを使ったら?

216 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 21:55:47 ]
配列に入れて使え

217 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 22:13:00 ]
For i = 0 To c.Count
j=0
 For Each f In c
If j=i Then Exit For
j=j+1
 Next
MsgBox f
Next

218 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 22:55:24 ]
番号は使えないみたいだな
ItemクリックしたらDictionaryに飛んだ

ttp://msdn.microsoft.com/en-us/library/9kcx47hd%28VS.85%29.aspx

219 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 21:36:27 ]
test

220 名前:デフォルトの名無しさん [2010/03/05(金) 12:44:09 ]
WMI使ってリモートPCのIP変更したいんだが、変更後にRPCエラー待ちが発生して自動処理が難しい。
エラー待ちを無視するとか、なんかいい方法知ってる人がいたら助けて。

On Error Resume Next

strComputer = "10.1.1.1"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableDHCP()
Next



221 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:00:04 ]
素朴な疑問なのですが・・・
JScriptの変数の宣言(var文)って書いても書かなくても動きますが
どちらが推奨されますか?

222 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:20:27 ]
>>221
書いた場合と書かない場合は意味が違う
宣言時にはできるだけ書くべきと思う
--------------
a = 10;
function foo() {a = 20;}
foo();
WScript.Echo(a);
--------------
結果:20
--------------
var a = 10;
function foo() {var a = 20;}
foo();
WScript.Echo(a);
--------------
結果:10


223 名前:221 mailto:sage [2010/03/14(日) 04:11:27 ]
>>222
なるほど。そう言う違いがあるのですか・・・
ありがとうございました

224 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 12:34:38 ]
varといえば

var a = 10;
var a;

で、aがundefinedになると思い込んでいて
はまりかけたことがあった。

225 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:24:20 ]
バッチファイルからWSHを呼び出す際、
バッチからサブルーチン呼出すみたいにパラメータ渡すことは可能ですか・

226 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:52:43 ]
>>225
可能
渡されたパラメタはWScript.Argumentsで参照できる

227 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:13:23 ]
有難う御座います!

228 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 10:28:58 ]
WSHの何か良いリファレンスブックみたいなのってありますか?
言語は何の奴でもまぁ使えると思うんで何でも良いんですが

229 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 11:49:47 ]
Scripting Guide 2000

230 名前:228 mailto:sage [2010/04/10(土) 01:11:59 ]
すいません、日本語の書籍でお願いしますorz



231 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 01:32:23 ]
>>230
初心者なら scd56jp.exe 内の script56.chm だけで良くねぇ?

232 名前:228 mailto:sage [2010/04/10(土) 02:27:18 ]
>>231
おお、これは凄い便利ですね。
ありがとうございます、凄い役にたちそうなんで嬉しいんですが
オフラインで使える本も、それはそれで欲しいです。
書籍の持ち込みは可能だけどデータの持ち込みは厳しい場所に持ち込みたいので。

233 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 11:33:33 ]
公式のヘルプを知らなかったって…

234 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 11:37:25 ]
VWD2005でVBSのコード補完してくれるらしいから
インストールしたけどVBSは全く補完してくれないよ。
かんか設定必要?

235 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 04:06:49 ]
CoInitialize は呼び出されていません。
こういう場合はどうすれば?

236 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 18:46:06 ]
CoInitialize を呼び出せば?

237 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 21:04:56 ]
ちょっと教えてください。

Wshからバッチファイルを呼び出す事は可能ですか?

238 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 22:01:02 ]
ちょっと教えてください。

WshからCoInitializeを呼び出す事は可能ですか?

239 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 22:53:38 ]
COMを挟めば可能

240 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 22:59:32 ]
COMが呼べるってことは既にCoInitializeされてることを意味するので無意味



241 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:39:11 ]
意味しないよ

242 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:16:08 ]
explorerのnavigation paneのshow/hideはshowbrowsebarでできないのか?

243 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 21:52:27 ]
セキュリティ対策だから無理だろ

244 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 18:03:17 ]
Windowsスクリプティング環境比較:PowerShell vs WSH
www.atmarkit.co.jp/fwin2k/operation/pshvswsh/pshvswsh_01.html
>Windows XPがリリースされ、先日Windows Vistaがリリースされるまで何年も経過したにもかかわらず、
>WSHのバージョンはVer.5.6からVer.5.7へとマイナー・バージョンアップにとどまっている。
>実はWSHは今後メジャー・バージョンアップされない運命にあるのだ。

バージョンアップされないってホント?

245 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 22:30:32 ]
うそ

246 名前:デフォルトの名無しさん [2010/05/28(金) 22:47:28 ]
>>244
なんか困るの?
つか、他の手段への以降してるんじゃないの?

247 名前:デフォルトの名無しさん [2010/05/28(金) 22:50:33 ]
移行だね。


248 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 16:07:55 ]
バージョンアップしなくてもよいからインラインスクリプトをサポートしてほしいな

249 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 21:25:33 ]
exec("cmd",0) も


250 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 11:44:46 ]
質問です。
例えば、sample01.exeという単一ファイルに対して、コンテキストメニューでavast!の"検査(S) sample01.exe"を実行することは
FolderItems→FolderItem→InvokeVerbでできます。
一方、ファイルが複数選択された状態では、コンテキストメニューは、"選択した領域のウィルス検査(S)"となり、
これを実行すると選択された全てのファイルに対してまとめて処理が行われます。
この例のようにファイルを複数選択した状態で、"選択した領域のウィルス検査(S)"をWSHで実行するにはどうすればよいですか?



251 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 15:20:04 ]
set items=folder.items
items.filter SHCONTF_NONFOLDERS,"*.exe"
items.invokeverbex "選択した領域のウィルス検査(S)"

252 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 15:22:56 ]
ashQuick.exeを呼べばいいんじゃないの






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<210KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef