|
 |
|
2009/12/23(Wed) 19:55:09|NO.29432
初めて質問させていただきます
HSP初心者なのでわからないことが沢山あります・・・
ですから皆さんの知恵をお借り出来たら良いなと思っています
何卒よろしくお願いします
質問内容は以下の通りです
ファイルをバイナリエディタで開くとします
例ですが
ADDRESS 0123456789ABCDEF
00000000 aaaabbbbcccccddd
00000001 e123456787654321
00000002 ................
00000003 ................
00000004 aaaa1234567890ju
00000005 asdfghjkl1212345
00000006 ................
00000007 aaaa************
とあるとします(自分で考えたのででたらめです・・・)
ここでaaaaから始まり次のaaaaの手前.(点)までを
ひとつの塊とし保存をしたいです(001.testと名前にするとします)
同様に次の塊を002.test更に次を003.text・・・・と保存したいです
YAHOO!の知恵袋に質問をさせて頂いた結果テキストファイルならば以下のようなソースで
できることを教えていただきました
exist "元のファイル.txt"
sdim 元のファイルの中身,strsize
bload "元のファイル.txt",元のファイルの中身
取り出しインデックスa=instr(元のファイルの中身,0,"aaaa") ;最初の取り出しインデックス
取り出しインデックスb=0
repeat
;「aaaa」を検索して、次の「aaaa」までを抜き出す
取り出しインデックスa=取り出しインデックスa+取り出しインデックスb+1
取り出しインデックスb=instr(元のファイルの中身,取り出しインデックスa,"aaaa")
if 取り出しインデックスb=-1 : 取り出しインデックスb=strlen(元のファイルの中身)
;ファイルに保存する。これ以上「aaaa」が見つからなければrepeatから抜ける
保存ファイルの中身=strmid(元のファイルの中身,取り出しインデックスa-1,取り出しインデックスb)
bsave ""+cnt+".test",保存ファイルの中身
if 取り出しインデックスb=strlen(元のファイルの中身) : break
loop
dialog "終了しました"
これですとテキストファイル(メモ帳で作成したもの)ならば
1.test 2.test 3.testとaaaaから次のaaaa手前までを一塊とし保存することができました
しかしバイナリファイルですと、1.textのみだけが作成されしかもまったく関係ない
文字列になっていました・・・
回答者さん曰く「バイナリファイルの場合は難しくなる」とのことなので
こちらで質問させていただくことにしました
初めて質問をさせていただくのにも関わらず長文すいません
ここまで読んでいただきありがとうございました
質問のほうをよろしくお願いします

| |
|
2009/12/23(Wed) 19:56:58|NO.29433
バイナリにおける文字列が投稿させていただいた結果ずれてしまい
見にくくなってしまいました
すいません・・・
|
|
2009/12/23(Wed) 21:44:23|NO.29437
デリミタリが"aaaa"なら、先頭から1バイトづづ進めながらlpeekで確認できると思います
; bufは元のファイルの中身
repeat
if cnt > strlen(buf) - 4 : break
drm="" : lpoke drm, 0, lpeek(buf, cnt)
if drm == "aaaa" {
cnt_drm++
size_block=cnt - index_drm
index_drm=cnt
mes ""+cnt_drm+"番目のデリミタリ("+drm+")の先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+size_block
}
loop
|
|
2009/12/23(Wed) 21:50:00|NO.29438
回答ありがとうございます
実行してみますとerror 6 in line 3とでてしまい型が違いますと出ます
line3の命令はカウンターが大きい場合repeatを抜け出すという命令ですよね?
試しに
line3を消し実行しますと今度はline4だった場所が
error 3 in line 4とでてパラメータの値が異常ですとでてしまい
実行できない状態でとまっています・・・
解決策を教えていただければ幸いです・・・
|
|
2009/12/23(Wed) 21:58:57|NO.29440
>実行してみますとerror 6 in line 3とでてしまい型が違いますと出ます
そのまま実行していませんか?
bload などを使って変数bufにデータを入れていないからエラーになりますよ。
|
|
2009/12/23(Wed) 21:59:26|NO.29441
"aaaa"はバイナリデータにおける0x61616161をさしているので
単に0xAAAAのデータを探したいのであれば、それに対応する文字列"ェェ"で探せばokだと思います。
実際に確かめたわけではないので確証はないです...
ちなみにバイナリと文字列との対応は以下のスクリプトの0xAAAAの部分書き換えればすぐ分かる。
sdim p1,10
wpoke p1,0,0xAAAA
mes p1
文字列のバイナリの対応は以下のスクリプトの"AAAA"の部分書き換えればすぐ分かる。
p1="AAAA"
mes wpeek(p1,0)
|
|
2009/12/23(Wed) 22:22:18|NO.29442
デリミタリは"aaaa"じゃなくて2バイトバイナリのaaaaなんですね、申し訳ありません
こうなるのかと思います
; bufは元のファイルの中身、size_bufはファイルサイズ
repeat
if cnt > size_buf - 2 : break
if wpeek(buf, cnt) == $aaaa {
cnt_drm++
size_block=cnt - index_drm
index_drm=cnt
mes ""+cnt_drm+"番目のデリミタリの先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+size_block
}
loop
|
|
2009/12/23(Wed) 22:22:36|NO.29443
PCがなぜかフリーズしてしまい思うように作業ができなく
返信が遅くなりました
すいません・・・
Hatterさん回答ありがとうございます
そのやり方で試してみた結果バイナリ用に変換されましたが使い方が難しいと
自分で思っています(初心者なので・・・)
しかし勉強になりました
ありがとうございます
inoviaさんによる助言でしたが試した結果
無事にmesにより場所が特定されました・・・
ですが
;bsave dir_exe+"\\"+cntr+".bin", buf, size_block, cnt
における
;をはずして実行しましたがerror12がでてしまいます
この命令は保存という命令ということはわかりますが
いつもbsave "名前"で保存していたので
いまいちどのようになっているのかわかりません・・・
皆さんお忙しい中すいませんが助言していただけるとうれしいです
helpを見たのですが・・・「???」状態でした・・・
|
|
2009/12/23(Wed) 22:48:30|NO.29445
|
|
2009/12/23(Wed) 23:12:04|NO.29447
つまり
dir_exeというのは起動しているexeの場所を指し
この場合は(dir_exe+"\\"+cntr+".bin", buf, size_block, cnt)
起動している場所にcntrの値.binとして出力すると言うことですね・・・?
何度もすいませんが
cnrtというのはcntの間違いなのでしょうか?
探してもこれひとつしかないようなのですが・・・
また
size_block,cntの意味がわかりません
調べてみても
size_blockが見つからず混乱中です
これはセーブするサイズ(Byte単位)
とのことですが必要なのですか?
教えてください・・・
|
|
2009/12/23(Wed) 23:29:55|NO.29448
size_blockとかはwoodfieldsさんが定義したものだから
のってるわけない・・・何寝ぼけてるんだか(自分がなさけない)
えっとですね
なぜか保存されないという・・・
ファイルが見つからないというエラーが
なぜ保存するのにもかかわらず、ファイルが見つからないという
エラーが発生するのか・・・?
|
|
2009/12/23(Wed) 23:30:43|NO.29449
すいません投稿と削除、再投稿のタイミングがおかしくなったようです
NO.29437からはdir_exe+"\\"+cntr+".bin", buf, size_block, cntは削除されてると思います
ファイルのセーブはNO.29442の
mes ""+cnt_drm+"番目のデリミタリの先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+size_block
に続けて、以下を追加するということで
sdim buf_block, size_block
memcpy buf_block, buf, size_block, 0, index_drm
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_block
|
|
2009/12/23(Wed) 23:59:44|NO.29451
>>bsave dir_exe+"\\"+cntr+".bin", buf, size_block, cnt
→何処から出てきた?
それは別として、
この場合 aaaa の場合は問題ありませんが abcd を検索する場合は $cdab となります。
(知っていたら、ごめんなさい。)
>>helpを見たのですが・・・「???」状態でした・・・
→まず、「???」状態を解決しましょう。読むだけではなく色々試したのでしょうか?
まず自分なりに考えたスクリプトを貼り付けて、そこから議論した方が早い気がします。
”バイナリ”についてもファイルの種類で、方法が微妙に変わります。
(woodfieldsさん、横長で見づらいです。)
|
|
2009/12/24(Thu) 00:01:31|NO.29452
しまった、おそかった。
|
|
2009/12/24(Thu) 00:01:43|NO.29453
返答ありがとうございます
No.29442のやり方はなぜかうまくいかなかったので初めの方を使わせていただいております
ちなみに今の現状は
exist "test"
sdim buf,strsize
bload "test",buf
repeat
if cnt > strlen(buf) - 4 : break
drm="" : lpoke drm, 0, lpeek(buf, cnt)
if drm == "aaaa" {
cnt_drm++
size_block=cnt - index_drm
index_drm=cnt
mes ""+cnt_drm+"番目のデリミタリ("+drm+")の先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+size_block
sdim buf_block, size_block
memcpy buf_block, buf, size_block, 0, index_drm
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_block
}
loop
という風になっておりまして(おかしいところが見つからない)(知識不足・・・)
またこの状態でやりますと
error 20 in line 15
バッファオーバーフロー
が起こってしまいます
調べてみましたら
http://hsp.tv/play/pforum.php?mode=pastwch&num=15070
のようなことが書かれていましたが
return使っていませんし・・・
すいません何度も質問してしまって・・・
|
|
2009/12/24(Thu) 00:04:48|NO.29454
KAさん助言ありがとうございます
あと、
NO.29442のやり方ですと
なぜかmesによる文字が表示されません
ところどころ変えてみていますが初めに教えていただいたほうは成功するものの
NO.29442のほうは・・・
|
|
2009/12/24(Thu) 00:53:39|NO.29458
>>なぜかmesによる文字が表示されません
→どこが違うのか見比べましょう。
その前に”バイナリ”の意味を、どの程度理解されているかで、回答も変わってきます。
(華々しく、勘違いされているような気がします。)
最初の質問で”バイナリエディタ”の、ダンプ部分しか有りませんでしたが、私の知る限
りその手のエディタは、必ず隣にアスキーコード(や日本語等)に解釈された文字が出て
いますが、それとの関係が分かれば疑問も解消されるでしょう。
|
|
2009/12/24(Thu) 01:31:02|NO.29459
すごい泥縄で申し訳ありませんが、NO.29442とNO.29449をあわせてみました
aaaaではなくaaaaaaとかaaaaaaaaとかの場合は問題がおこりそうです
exist dir_exe+"\\test"
size_buf=strsize
sdim buf,size_buf
bload dir_exe+"\\test",buf
repeat
if cnt > size_buf - 2 : break
if wpeek(buf, cnt) == $aaaa {
cnt_drm++
size_block=cnt - index_drm
index_drm=cnt
mes ""+cnt_drm+"番目のデリミタリの先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+size_block
if cnt_drm == 1 {
; 最初のaaaaまで
sdim buf_block, size_block
memcpy buf_block, buf, size_block, 0, index_drm-size_block
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_block
}else{
; aaaaとaaaaにはさまれたブロック
sdim buf_block, size_block-2
memcpy buf_block, buf, size_block-2, 0, index_drm-size_block+2
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_block-2
}
}
loop
if index_drm != 0 {
; 最後のaaaa以降
cnt_drm++
sdim buf_block, size_buf-index_drm-2
memcpy buf_block, buf, size_buf-index_drm-2, 0, index_drm+2
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_buf-index_drm-2
}
|
|
2009/12/24(Thu) 04:35:07|NO.29461
>woodfieldsさん
orihaganさんが書いたダンプリストはアスキーダンプのようです。
>orihaganさん
バイナリファイルを前提にするなら、strlen等、文字列用の命令を使ってはいけません。
dir=dir_cur+"\\"
file=dir+"test"
exist file: size=strsize
if size<0: dialog file+"が見つかりません"
sdim buf,size
bload file,buf
s=""
p=0
no=1
repeat
if p+4>size: break
lpoke s,0,lpeek(buf,p)
if s=="aaaa" {
if p>0 {
gosub *l_save
found=p
no++
p+=3
} else {
found=p
}
}
p++
loop
if p<size {
p=size
gosub*l_save
}
end
*l_save
saveSize=p-found
sdim fbuf,saveSize
memcpy fbuf,buf,saveSize,0,found
bsave dir+no+".bin",fbuf,saveSize
return
|
|
2009/12/24(Thu) 06:00:57|NO.29463
アスキーダンプですか
ならやっぱり泥縄ですが以下のようになります
"aaaaa"とか"aaaaaa"のように"aaaa"の後に続く"a"はデリミタリに含まれないと解釈しています
exist "test"
size_buf=strsize
sdim buf,size_buf
bload "test",buf
repeat
if pntr > size_buf - 4 : break
drm="" : lpoke drm, 0, lpeek(buf, pntr)
if drm == "aaaa" {
cnt_drm++
size_block=pntr - index_drm
index_drm=pntr
if cnt_drm == 1 {
; 最初のaaaaまで
mes ""+cnt_drm+"番目のデリミタリ("+drm+")の先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+size_block
sdim buf_block, size_block
memcpy buf_block, buf, size_block, 0, index_drm-size_block
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_block
}else{
; aaaaとaaaaにはさまれたブロック
mes ""+cnt_drm+"番目のデリミタリ("+drm+")の先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+(size_block-4)
sdim buf_block, size_block-4
memcpy buf_block, buf, size_block-4, 0, index_drm-size_block+4
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_block-4
}
pntr+=4
}else{
pntr++
}
loop
if index_drm != 0 {
; 最後のaaaa以降
mes ""+cnt_drm+"番目のデリミタリ("+drm+")からファイル末尾までのサイズ : "+(size_buf-index_drm-4)
cnt_drm++
sdim buf_block, size_buf-index_drm-4
memcpy buf_block, buf, size_buf-index_drm-4, 0, index_drm+4
bsave dir_exe+"\\"+cnt_drm+".bin", buf_block, size_buf-index_drm-4
}

| |
|
2009/12/24(Thu) 07:45:49|NO.29464
みなさんおはようございます
ANTARESさん
woodfieldsさん
ありがとうございました
他深夜HSPにおいて何度か試していたところいつの間にか寝てしまっていたようで
おきたら6時30でした・・・
すいません
そして今コメントを打つ前に何度かトライしていたのでかなり返信がおそくなって
しまいました・・・
早速試させて見た結果
今度は大き目のファイルを作って200MB(作るの大変だった・・・)ほどで試してみました
ANTARESさんの方を試させていただいた結果
1つめのファイルは含まれていないもの(aaaaから始まる前の部分)が生成されるだけで
他のファイルはちゃんとaaaaから始まっていました
woodfieldsさんの方もANTARESさんとまったく同様でした
しかしwoodfieldsさんの方は場所が示されるので(保存がすべて終了してから)
唯一そこだけが違いました
みなさんのおかげで成功することができました
しかし時間が結構かかってしまうので大容量のものには向かない?ですかね
試した結果10分以上はかかってしまいそのときは「応答してません」みたいに
フリーズのように固まってしまいます(実際は動いており他の作業もできます)
これはrepeat~loopによるものなのでしょうか
|
|
2009/12/24(Thu) 08:11:13|NO.29466
>>今度は大き目のファイルを作って200MB(作るの大変だった・・・)ほどで試してみました
>>しかし時間が結構かかってしまうので大容量のものには向かない?ですかね
→多分想定外だと思います。
|
|
2009/12/24(Thu) 08:12:16|NO.29467
woodfieldsさん
ANTARESさん
KAさん
Hatterさん
inoviaさん
ありがとうございました
貴重な時間を使っていただいて・・・
解決しましたのでチェックをさせていただくために
コメントさせていただきます(早めに解決を押した方がよいと思ったので)
再度質問するときにはぜひよろしくお願いします
本当にありがとうございました
|
|
2009/12/24(Thu) 08:54:05|NO.29468
解決済みのところお邪魔します
遅いとは思いますがこういうのも
exist dir_exe+"\\test"
size_buf=strsize
t_buf=""
repeat
if index_drm >= size_buf : break
bload dir_exe+"\\test", t_buf, 4, index_drm
if t_buf == "aaaa" {
cnt_drm++
mes ""+cnt_drm+"番目のデリミタリ(aaaa)の先頭からのバイト位置 : "+index_drm+" ブロックサイズ : "+size_block
size_block=0 : index_drm+=4
}else{
if size_block == 0 {
bsave ""+(cnt_drm+1)+".bin", t_buf, 1
}else{
bsave ""+(cnt_drm+1)+".bin", t_buf, 1, size_block
}
size_block++ : index_drm++
}
loop
if cnt_drm == 0 {
mes "デリミタリ(aaaa)は存在しません。ファイルサイズ : "+size_block
}else{
mes ""+cnt_drm+"番目のデリミタリ(aaaa)からファイル末尾までのブロックサイズ : "+size_block
}
|
|
2009/12/24(Thu) 09:32:49|NO.29470
遅いなんてとんでもない
ありがとうございます
今試してみたところ
これはaaaaは含まれなかったです
aaaa含まれないですよね!?
|
|
2009/12/24(Thu) 09:50:18|NO.29471
解決したのにすいません・・・
最後に遅くなる理由がわかりました・・・!?
woodfieldsさんANTARESさんによるソースですと
先ほど行ったようにaaaaの前が1.binとして保存されてしまう
つまり、もしaaaaが後半のところにあった場合は前半の
いらない部分(大量)が保存されてしまうので
保存するのに時間がかかるのではないかと・・・?
簡潔に述べると1.bin(aaaaの前)を保存しないつまり無視することができれば
速くなる!!
というのが俺の意見です
どう思いますか?
|
|
2009/12/24(Thu) 10:58:04|NO.29472
>>簡潔に述べると1.bin(aaaaの前)を保存しないつまり無視することができれば
>>速くなる!!
適時コメントを入れて試してください。
遅いというのがタスク占有みたいなことなら、
たとえばNO.29463とNO.29468の
cnt_drm++
を
cnt_drm++ : wait 1
に変更してみてください。
それでもタスクを占有するようでしたら、全体を数十~数百KBに分けて処理し、
その処理ごとにwaitを入れるとかになると思います。
|
|
2009/12/24(Thu) 11:31:40|NO.29473
waitを入れることで負担をかけないようにするんですね
軽くする件ですが保存しないでやってみた結果あまり
変わりません(自分で空のファイルを作って保存してみたら即効でした)
ですから他に理由があるかと・・・
やはり検索するのに時間がかかるんですかね・・・?
|
|
2009/12/24(Thu) 17:26:50|NO.29480
143,569,750バイト目に最初のデリミタリがあらわれる
188,023,220バイトのファイルでNO.29463をためしてみたら、
2分半「応答してません」が続き、1626個のデリミタリを検出するのに
3分半かかりました。
1バイトづつ進むやりかの他に思い浮かびません、申し訳ない。ということで。
|
|
2009/12/24(Thu) 17:41:47|NO.29481
woodfieldsさんありがとうございました
やはり1バイトずつですよね
バイナリエディタなどの検索機能の仕掛けがわかればいいんですが・・・
お騒がせしてしまいすいませんでした
|
|
2009/12/26(Sat) 19:05:47|NO.29523
|
|
2009/12/26(Sat) 20:00:10|NO.29525
atom16さん情報ありがとうございます
自分もこのBM法というやり方に辿り着いて
今試しているのですが
保存するに当たって苦戦しています・・・
ためしに100MBあたりのものでaaaaがどの場所にあるのか
表示させてみた結果数秒(ほとんど一瞬)で検索をしてしまいました
保存するためにwoodfieldsさんたちのスクリプトと
比較しているのですがまだ保存にいたってません
それはさておき情報ありがとうございました^^
|
|
2009/12/27(Sun) 02:14:18|NO.29540
余計なおせっかいです。
http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200601/06030052.txt
のぷまさんのBM法のスクリプトのサンプル部分にファイル保存を追加してみました。
/*************** サンプル *******************************/
fn=dir_exe+"\\hsp3.exe" ; 調べるバイナリファイル
key= "depend" : lkey=strlen.key ; 検索文字、長さ
;key=$020102 : lkey=3 ; 数値の場合
mes fn+" 内の \""+key+"\" を検索してみる\n"
notesel buf : noteload fn
size=strsize ; サイズ
pbuf=varptr.buf ; 調べる先頭のポインタ
st // 時間測定開始
i=0 : n=0
repeat
if bsearch(i, pbuf, size, key, lkey)= -1 : break // バイナリサーチ
i+=stat : mes ""+i+"Byte目" : n++
;↓追加①
if n == 1 {
; 最初のkeyまでのブロックのファイル保存
sdim buf_block, i
memcpy buf_block, buf, i, 0, 0
bsave dir_exe+"\\"+n+".bin", buf_block, i
}else{
; keyとkeyにはさまれたブロックのファイル保存
sdim buf_block, (i-o_i-lkey)
memcpy buf_block, buf, (i-o_i-lkey), 0, o_i+lkey
bsave dir_exe+"\\"+n+".bin", buf_block, (i-o_i-lkey)
}
o_i=i
;↑追加①
i++
loop
;↓追加②
if n != 0 {
; 最後のaaaa以降のブロックのファイル保存
sdim buf_block, (size-i)
memcpy buf_block, buf, (size-i-lkey), 0, size-i+lkey
bsave dir_exe+"\\"+(n+1)+".bin", buf_block, (size-i-lkey)
}
;↑追加②
gt // 時間測定終了
mes "\n "+n+"個発見!(^^)v"

| |
|
2009/12/27(Sun) 09:18:33|NO.29546
PCが壊れて修理中のつなぎマシンを買って旧マシンのHDのバックアップとか
新マシンのセットアップとかやってて返事が遅れました。
遅いということであれば、拙作anthspex.dllのbfind命令を使うといいでしょう。
>1つめのファイルは含まれていないもの(aaaaから始まる前の部分)が生成される
「no=0」の後に「found=-1」を挿入して
「if p>0」を「if found>=0」としてください。
でも、このくらいは頑張って自力で解決してくれないと
サンプルを書いた甲斐がないです。
※Windows7は使い物になりません。XPを買おうかと思っています。
問題はドライバが揃うかどうか。
MS IMEも使い物にならん。ATOKも買わなきゃ。
※旧マシンのHDは調子が悪いみたいでパーティションごとコピーするツールでは
コピーできませんでした(増設HDはコピーできたのに)。
エクスプローラのコピーだとコピーできないフォルダがあるし、
何をしてるかわからないバックアップツールなんてリストアできる保証がないので
怖くて使えないし、困りました。
|
|
2009/12/27(Sun) 09:25:02|NO.29547
「余計なおせっかいです」なんてとんでもないです
解決済みなのにわざわざ返答していただき
ありがとうございました
この方法を用いることで数秒で保存までに至りました
ありがとうございました
今まで協力していただいた皆様本当にありがとうございました
「こんなのもあるよ?」など意見がありましたら気軽に書いていただけると
うれしいです
最後に本当にありがとうございました(計4回目(笑))
では・・・
|
|
2009/12/27(Sun) 09:27:27|NO.29548
※Windows7は使い物になりません。XPを買おうかと思っています。
そうなんですか・・・
自分は一応XP愛用者なのでXPを使っていますがこの頃7はいいのかな?
と思い情報を集めていたところでした
情報ありがとうございます^^
|
|
2009/12/27(Sun) 10:43:29|NO.29549
>※Windows7は使い物になりません。XPを買おうかと思っています。
>そうなんですか・・・
参考にされるんだったら具体的に書いた方がいいですね。
いちばんの問題は、Vistaも同じらしいですが、管理者権限でも
アクセスできないフォルダがあることです。エクスプローラのコピーによる
バックアップができないのはこのせいです(エクスプローラで触りたいだけなら
面倒な解決方法がありますが、たぶん、すべてのフォルダにさわれるわけでは
ないです)。
エラー表示は一切ありませんでしたが、Document And Settingsなんて
コピー先の中身が空でした(ていうか、そもそも7のフォルダじゃなくて
XPのフォルダをコピーしようとしているのに……)。
所有者に触らせないなんてマイクロソフトは一体何様のつもりだ?
これは、はっきりいってウィルスと変わらない悪行といっていいでしょう。
XPでも、アップデートすると、再起動するまで10分に1回くらいダイアログを
出してユーザーの操作を妨害するというウィルスに等しい妨害工作を
やっていましたが、遂にここまで来たかという感じです。
もうひとつ、非常に気に入らないのは、コンピュータ(従来のマイコンピュータ)を
開いたとき、フォルダのショートカットからだろうが、何だろうが同じ場所に
表示するようになったことです。今までマイコンピュータを開いたときは
左に、antaresフォルダやHSPフォルダのショートカットを開いたときは
右に表示するようにして、さらに微妙に位置を変えて4通りくらいの表示位置を
記憶させていたのですが、すべてマイコンピュータを開いてそこまで行ったのと
同じ表示位置になってしまいます。
いろんなツールのありかが変わったりなくなったりしているので、
探すのがたいへん。95→XPの比ではありません。
NetBeuiが完全に使えなくなったらしく、Win95マシンやWin98マシンとは
ファイル共有ができません。
Alt+Tabでアプリケーションを切り替えるとき、ウィンドウのサムネイルを
表示するようになりましたが、サムネイルじゃたいていのウィンドウは
似たり寄ったりなので、かえってわかりにくくなりました。
慣れれば右下にあるアイコンに注目できるようになるかもしれませんが……
|
|
2009/12/27(Sun) 12:53:36|NO.29552
情報ありがとうございます
自分的にはコマンドプロンプトを使う際にXPだとファイルをドラッグ&ドロップ
できるのに対し
たしかVistaだとできなかった気が・・・
自分的にはそれが結構腹が立ちました(だからファイルまでのパスを入力しなければならない)
あと同様に管理者権限で実行しなければ動作をしないものもあれば
うまく動かないものもありますので
その面ではXPがいいなぁと思います
まあXPにはXPのVistaにはVistaの7には7のいいところがあるので
どれが良いなどとは一概には言えませんね・・・
|
|
2009/12/27(Sun) 22:48:05|NO.29559
皆さんこんばんわ^^
No.29540のwoodfieldsさんのスクリプトを参考に不都合が起こる場所を変更することにより
無事に作成することに成功しました
しかしながら600MB程度のファイルで試したところ
エラー1と出てしまい動作しませんでした(容量に制限がかかっているのかもしれません)
ためしに400MB程度で行うと遅くはなるもののちゃんと動作しました
エラー1を調べてみた結果、ちゃんとしたエラーではなく
HSPエラー2~41として定義されてない問題が起きた場合に
これが表示されるようになっている
基本的には処理に問題がある何かしらのコーディングミスがあると考えてください。
とのことでした
ですので容量に関係していると思うのですがちゃんとした理由がわかりません
大容量のファイルを扱うことは少ないと思いますが
onerrorを用いてendと設定していても
エラー1と表示されてしまうので
これをどうにかしたいです・・・
なにかいい方法はありませんか?
調べてみてもなかなかいい回答が見つからないので・・・
迷惑だとは思いますがよろしくお願いします・・・
|
|
2009/12/28(Mon) 11:12:56|NO.29570
そうですよね・・・
エラーが起こっている場所はわかっていましたが対処法がわからず
このような質問をしてしまいました
ANTARESさんに教えていただいたサイトのことを
しましたが解決いたしませんでした
エラーが起こっている場所はnoteloadで
noteloadは
noteload "filename",p1
"filename" : 読み込みファイル名
p1(-1) : 読み込みサイズの上限値
とのことです
一応400MB程度のものは動作するスクリプトを
問題部分だけ書きますと
dialog "",16
fn=refstr
notesel buf
noteload fn
なのですが
noteloadのp1を省略すると上限はないとのことですが
容量の関係で上限があるように思えます
調べてみましたらメモ帳などにも上限があるとのことなので
これに関係しているのではないか?と思っています
noteloadのほかに使えるものを探しているのですが
なかなか見つからず
また
dialog "",16
exist refstr
size=strsize
fn=refstr
notesel buf
noteload fn,size
とそのファイルの値を設定しても駄目でした
心当たりがある方は教えていただけると幸いです
よろしくお願いします
|
|
2009/12/29(Tue) 09:38:23|NO.29590
>エラーが起こっている場所はnoteloadで
だから、文字列用の命令使っちゃだめだってば。
bloadを使ってください。
以下のように書き換えてテキストファイルで試したら、
noteloadではエラーは起きませんでしたよ。
#if 0
fn=dir_exe+"\\hsp3.exe" ; 調べるバイナリファイル
#else
dialog "",16
fn=refstr
#endif
|
|
2009/12/29(Tue) 10:13:26|NO.29592
ファイル容量は683メガ
|
|
2009/12/29(Tue) 11:42:30|NO.29593
みなさん解決した後に、だらだら書くのはやめましょう。
orihaganさん、ここは一旦別に立てるべきだったのでは?
>>しかしながら600MB程度のファイルで試したところ
→何に使いたいのかは、聞きませんが・・・・・
>>noteloadのp1を省略すると上限はないとのことですが
>>容量の関係で上限があるように思えます
→マニュアル(見てますか?)によると、2GB程度です。
容量というより数値の整数表現が、符号付32ビットだからです。
(私もだらだら書いちゃった)
|
|
2009/12/29(Tue) 12:38:28|NO.29595
すいません塾という名の***により
返答が遅くなりました
>>何に使いたいのかは、聞きませんが・・・・・
500MBほどのファイルを(キリが良いから)作ろうとしたところ
なぜか600MBほどになってしまったので600MBほどとさせていただきました
>>マニュアル(見てますか?)
マニュアルというかhelpのリファレンス?を参考もしくはインターネットにて情報を集めています
>>みなさん解決した後に、だらだら書くのはやめましょう。
>>orihaganさん、ここは一旦別に立てるべきだったのでは?
そうですね
以降の質問は自分で解決に努めるとともに、わからない場合は新規という形で
皆さんの力を借りれればなぁと思います
みなさんありがとうございました
では・・・
|
|