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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0506
harvestbload5解決


harvest

リンク

2007/5/6(Sun) 01:11:57|NO.8075

bloadでテキストファイルを読み込みたいのですが、終端まで読み込めるファイルと
そうではないファイルがあります。bloadの仕様なのかバグなのかよくわかりません。
原因を知ってる方いましたら教えてくださいませ。

掲示板にファイルの内容を張ると内容が変わってしまうかもしれないので、下記のURL
にファイル、スクリプト等をZIPにまとめてうpしたので参考にして下さい。
http://www.uploda.org/uporg799330.zip.html



この記事に返信する


TAKA

リンク

2007/5/6(Sun) 01:28:29|NO.8076

おそらくnull文字が原因でしょう。
テキストファイルを直接見ると、暗号化しているように思えます。
もしくはバイナリファイルの拡張子のみを変えたか。

バイナリエディタで開いてみたところ、やはりBファイルにはnull(00)が含まれていました。
自分も詳しいことはわからないのですが、HSPではnull文字があるとそこで区切られてしまうようです。



KIMU

リンク

2007/5/6(Sun) 02:17:37|NO.8077

>そうではないファイルがあります。bloadの仕様なのかバグなのかよくわかりません。
バグでも何でもありません。
ファイルは正常に読み込めています。


screen 0,800,600 font "",10 exist "A.txt" suze=strsize sdim MainBuffer,suze bload "A.txt",MainBuffer repeat suze a++ pos (cnt\32)*12,(cnt/32)*12 mes strf("%02x",int(peek(MainBuffer,cnt))) loop mes "Asize "+a exist "B.txt" suze=strsize sdim MainBuffer,suze bload "B.txt",MainBuffer repeat suze b++ pos (cnt\32)*12+400,(cnt/32)*12 mes strf("%02x",peek(MainBuffer,cnt)) loop mes "Bsize "+b stop

strlen()は文字列の長さを返す関数で、バッファのサイズを収得する物ではありません。
文字列は$00が終端になるので間に$00があるデータでstrlen()を使ってもそのバッファにある
文字列全ての長さは返ってきません。


a="ABCD" a="AB" repeat 4 pos (cnt\32)*32,0 mes strf("$%02x",peek(a,cnt)) mes strf(" %c",peek(a,cnt)) loop pos 0 mes "文字列の長さ "+strlen(a)
こうやって見れば分かりやすいかな?



ハテナ

リンク

2007/5/6(Sun) 02:25:33|NO.8078

> 終端まで読み込めるファイルとそうではないファイルがあります

少なく表示されるのは、strlen の仕様で、
読み込みはどちらも正常にされていると思います。
文字列は、0が文字の終わりと言う決まりがあって、
strlen は名前の通り str(文字列) の長さを返す関数なので
途中の0までのサイズが返ったと言う事だと思います。



ハテナ

リンク

2007/5/6(Sun) 02:29:28|NO.8079

またかぶってしまった・・。



harvest

リンク

2007/5/6(Sun) 09:37:23|NO.8080

みなさん返答ありがとうございます。
strsizeでの確認やバッファ書き出し等を試したところ、きちんと最後まで読み込めている様でした。
皆さんの言うようにstrsizeの仕様を自分が見落としていただけでした。
ついでに、ヘルプには明記されていませんがmesboxでも自動的にnull以降がカットされるみたいです。
TAKAさん、KIMUさん、ハテナさん、ありがとうございました。



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