HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1223
orihaganバイナリファイルにおける文字検索において44解決


orihagan

リンク

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のみだけが作成されしかもまったく関係ない
文字列になっていました・・・
回答者さん曰く「バイナリファイルの場合は難しくなる」とのことなので
こちらで質問させていただくことにしました
初めて質問をさせていただくのにも関わらず長文すいません
ここまで読んでいただきありがとうございました
質問のほうをよろしくお願いします



この記事に返信する


orihagan

リンク

2009/12/23(Wed) 19:56:58|NO.29433

バイナリにおける文字列が投稿させていただいた結果ずれてしまい
見にくくなってしまいました
すいません・・・



woodfields

リンク

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



orihagan

リンク

2009/12/23(Wed) 21:50:00|NO.29438

回答ありがとうございます
実行してみますとerror 6 in line 3とでてしまい型が違いますと出ます
line3の命令はカウンターが大きい場合repeatを抜け出すという命令ですよね?
試しに
line3を消し実行しますと今度はline4だった場所が
error 3 in line 4とでてパラメータの値が異常ですとでてしまい
実行できない状態でとまっています・・・

解決策を教えていただければ幸いです・・・



inovia

リンク

2009/12/23(Wed) 21:58:57|NO.29440

>実行してみますとerror 6 in line 3とでてしまい型が違いますと出ます

そのまま実行していませんか?
bload などを使って変数bufにデータを入れていないからエラーになりますよ。



Hatter

リンク

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)



woodfields

リンク

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



orihagan

リンク

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を見たのですが・・・「???」状態でした・・・



Hatter

リンク

2009/12/23(Wed) 22:48:30|NO.29445

bsaveについては以下のスレッドを参考にしてみてください。
http://hsp.tv/play/pforum.php?mode=all&num=29387



orihagan

リンク

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単位)
とのことですが必要なのですか?
教えてください・・・



orihagan

リンク

2009/12/23(Wed) 23:29:55|NO.29448

size_blockとかはwoodfieldsさんが定義したものだから
のってるわけない・・・何寝ぼけてるんだか(自分がなさけない)
えっとですね
なぜか保存されないという・・・
ファイルが見つからないというエラーが
なぜ保存するのにもかかわらず、ファイルが見つからないという
エラーが発生するのか・・・?



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



KA

リンク

2009/12/23(Wed) 23:59:44|NO.29451

>>bsave dir_exe+"\\"+cntr+".bin", buf, size_block, cnt
 →何処から出てきた?

それは別として、
この場合 aaaa の場合は問題ありませんが abcd を検索する場合は $cdab となります。
(知っていたら、ごめんなさい。)

>>helpを見たのですが・・・「???」状態でした・・・
 →まず、「???」状態を解決しましょう。読むだけではなく色々試したのでしょうか?

まず自分なりに考えたスクリプトを貼り付けて、そこから議論した方が早い気がします。
”バイナリ”についてもファイルの種類で、方法が微妙に変わります。


(woodfieldsさん、横長で見づらいです。)



KA

リンク

2009/12/24(Thu) 00:01:31|NO.29452

しまった、おそかった。



orihagan

リンク

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使っていませんし・・・
すいません何度も質問してしまって・・・



orihagan

リンク

2009/12/24(Thu) 00:04:48|NO.29454

KAさん助言ありがとうございます
あと、
NO.29442のやり方ですと
なぜかmesによる文字が表示されません
ところどころ変えてみていますが初めに教えていただいたほうは成功するものの
NO.29442のほうは・・・



KA

リンク

2009/12/24(Thu) 00:53:39|NO.29458

>>なぜかmesによる文字が表示されません
 →どこが違うのか見比べましょう。

その前に”バイナリ”の意味を、どの程度理解されているかで、回答も変わってきます。
(華々しく、勘違いされているような気がします。)

最初の質問で”バイナリエディタ”の、ダンプ部分しか有りませんでしたが、私の知る限
りその手のエディタは、必ず隣にアスキーコード(や日本語等)に解釈された文字が出て
いますが、それとの関係が分かれば疑問も解消されるでしょう。



woodfields

リンク

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 }



ANTARES

リンク

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



woodfields

リンク

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 }



orihagan

リンク

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によるものなのでしょうか



KA

リンク

2009/12/24(Thu) 08:11:13|NO.29466

>>今度は大き目のファイルを作って200MB(作るの大変だった・・・)ほどで試してみました
>>しかし時間が結構かかってしまうので大容量のものには向かない?ですかね


 →多分想定外だと思います。



orihagan

リンク

2009/12/24(Thu) 08:12:16|NO.29467

woodfieldsさん 
ANTARESさん
KAさん
Hatterさん
inoviaさん
ありがとうございました
貴重な時間を使っていただいて・・・
解決しましたのでチェックをさせていただくために
コメントさせていただきます(早めに解決を押した方がよいと思ったので)
再度質問するときにはぜひよろしくお願いします
本当にありがとうございました



woodfields

リンク

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 }



orihagan

リンク

2009/12/24(Thu) 09:32:49|NO.29470

遅いなんてとんでもない
ありがとうございます
今試してみたところ
これはaaaaは含まれなかったです
aaaa含まれないですよね!?



orihagan

リンク

2009/12/24(Thu) 09:50:18|NO.29471

解決したのにすいません・・・
最後に遅くなる理由がわかりました・・・!?
woodfieldsさんANTARESさんによるソースですと
先ほど行ったようにaaaaの前が1.binとして保存されてしまう
つまり、もしaaaaが後半のところにあった場合は前半の
いらない部分(大量)が保存されてしまうので
保存するのに時間がかかるのではないかと・・・?

簡潔に述べると1.bin(aaaaの前)を保存しないつまり無視することができれば
速くなる!!
というのが俺の意見です
どう思いますか?



woodfields

リンク

2009/12/24(Thu) 10:58:04|NO.29472

>>簡潔に述べると1.bin(aaaaの前)を保存しないつまり無視することができれば
>>速くなる!!
適時コメントを入れて試してください。

遅いというのがタスク占有みたいなことなら、
たとえばNO.29463とNO.29468の
cnt_drm++

cnt_drm++ : wait 1
に変更してみてください。
それでもタスクを占有するようでしたら、全体を数十〜数百KBに分けて処理し、
その処理ごとにwaitを入れるとかになると思います。



orihagan

リンク

2009/12/24(Thu) 11:31:40|NO.29473

waitを入れることで負担をかけないようにするんですね
軽くする件ですが保存しないでやってみた結果あまり
変わりません(自分で空のファイルを作って保存してみたら即効でした)
ですから他に理由があるかと・・・
やはり検索するのに時間がかかるんですかね・・・?



woodfields

リンク

2009/12/24(Thu) 17:26:50|NO.29480

143,569,750バイト目に最初のデリミタリがあらわれる
188,023,220バイトのファイルでNO.29463をためしてみたら、
2分半「応答してません」が続き、1626個のデリミタリを検出するのに
3分半かかりました。
1バイトづつ進むやりかの他に思い浮かびません、申し訳ない。ということで。



orihagan

リンク

2009/12/24(Thu) 17:41:47|NO.29481

woodfieldsさんありがとうございました
やはり1バイトずつですよね
バイナリエディタなどの検索機能の仕掛けがわかればいいんですが・・・
お騒がせしてしまいすいませんでした



atom16

リンク

2009/12/26(Sat) 19:05:47|NO.29523

解決済みのところすいません。

検索機能についてですが
HSPラウンジにバイナリデータを高速に検索するモジュールがありました。
http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200601/06030052.txt



orihagan

リンク

2009/12/26(Sat) 20:00:10|NO.29525

atom16さん情報ありがとうございます
自分もこのBM法というやり方に辿り着いて
今試しているのですが
保存するに当たって苦戦しています・・・
ためしに100MBあたりのものでaaaaがどの場所にあるのか
表示させてみた結果数秒(ほとんど一瞬)で検索をしてしまいました
保存するためにwoodfieldsさんたちのスクリプトと
比較しているのですがまだ保存にいたってません
それはさておき情報ありがとうございました^^



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"



ANTARES

リンク

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はコピーできたのに)。
エクスプローラのコピーだとコピーできないフォルダがあるし、
何をしてるかわからないバックアップツールなんてリストアできる保証がないので
怖くて使えないし、困りました。



orihagan

リンク

2009/12/27(Sun) 09:25:02|NO.29547

「余計なおせっかいです」なんてとんでもないです
解決済みなのにわざわざ返答していただき
ありがとうございました
この方法を用いることで数秒で保存までに至りました
ありがとうございました
今まで協力していただいた皆様本当にありがとうございました
「こんなのもあるよ?」など意見がありましたら気軽に書いていただけると
うれしいです
最後に本当にありがとうございました(計4回目(笑))
では・・・



orihagan

リンク

2009/12/27(Sun) 09:27:27|NO.29548

※Windows7は使い物になりません。XPを買おうかと思っています。
そうなんですか・・・
自分は一応XP愛用者なのでXPを使っていますがこの頃7はいいのかな?
と思い情報を集めていたところでした
情報ありがとうございます^^



ANTARES

リンク

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でアプリケーションを切り替えるとき、ウィンドウのサムネイルを
表示するようになりましたが、サムネイルじゃたいていのウィンドウは
似たり寄ったりなので、かえってわかりにくくなりました。
慣れれば右下にあるアイコンに注目できるようになるかもしれませんが……



orihagan

リンク

2009/12/27(Sun) 12:53:36|NO.29552

情報ありがとうございます
自分的にはコマンドプロンプトを使う際にXPだとファイルをドラッグ&ドロップ
できるのに対し
たしかVistaだとできなかった気が・・・
自分的にはそれが結構腹が立ちました(だからファイルまでのパスを入力しなければならない)

あと同様に管理者権限で実行しなければ動作をしないものもあれば
うまく動かないものもありますので
その面ではXPがいいなぁと思います
まあXPにはXPのVistaにはVistaの7には7のいいところがあるので
どれが良いなどとは一概には言えませんね・・・



orihagan

リンク

2009/12/27(Sun) 22:48:05|NO.29559

皆さんこんばんわ^^
No.29540のwoodfieldsさんのスクリプトを参考に不都合が起こる場所を変更することにより
無事に作成することに成功しました
しかしながら600MB程度のファイルで試したところ
エラー1と出てしまい動作しませんでした(容量に制限がかかっているのかもしれません)
ためしに400MB程度で行うと遅くはなるもののちゃんと動作しました
エラー1を調べてみた結果、ちゃんとしたエラーではなく

HSPエラー2〜41として定義されてない問題が起きた場合に
これが表示されるようになっている
基本的には処理に問題がある何かしらのコーディングミスがあると考えてください。

とのことでした
ですので容量に関係していると思うのですがちゃんとした理由がわかりません
大容量のファイルを扱うことは少ないと思いますが
onerrorを用いてendと設定していても
エラー1と表示されてしまうので
これをどうにかしたいです・・・
なにかいい方法はありませんか?
調べてみてもなかなかいい回答が見つからないので・・・
迷惑だとは思いますがよろしくお願いします・・・



ANTARES

リンク

2009/12/28(Mon) 06:23:27|NO.29564

 デバッグは自分でやりましょう。
それができなければ、プログラミングには向いてないと考えてください。
http://antares.cn/hsp/trap/index.html#illegal



orihagan

リンク

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
とそのファイルの値を設定しても駄目でした

心当たりがある方は教えていただけると幸いです
よろしくお願いします



ANTARES

リンク

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



ANTARES

リンク

2009/12/29(Tue) 10:13:26|NO.29592

 ファイル容量は683メガ



KA

リンク

2009/12/29(Tue) 11:42:30|NO.29593

みなさん解決した後に、だらだら書くのはやめましょう。
orihaganさん、ここは一旦別に立てるべきだったのでは?

>>しかしながら600MB程度のファイルで試したところ
 →何に使いたいのかは、聞きませんが・・・・・

>>noteloadのp1を省略すると上限はないとのことですが
>>容量の関係で上限があるように思えます
 →マニュアル(見てますか?)によると、2GB程度です。
  容量というより数値の整数表現が、符号付32ビットだからです。

(私もだらだら書いちゃった)



orihagan

リンク

2009/12/29(Tue) 12:38:28|NO.29595

すいません塾という名の***により
返答が遅くなりました
>>何に使いたいのかは、聞きませんが・・・・・
500MBほどのファイルを(キリが良いから)作ろうとしたところ
なぜか600MBほどになってしまったので600MBほどとさせていただきました

>>マニュアル(見てますか?)
マニュアルというかhelpのリファレンス?を参考もしくはインターネットにて情報を集めています

>>みなさん解決した後に、だらだら書くのはやめましょう。
>>orihaganさん、ここは一旦別に立てるべきだったのでは?
そうですね
以降の質問は自分で解決に努めるとともに、わからない場合は新規という形で
皆さんの力を借りれればなぁと思います

みなさんありがとうございました
では・・・



ONION software Copyright 1997-2021(c) All rights reserved.