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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0830
aファイル内のデータを1バイト単位で削除したい10解決


a

リンク

2012/8/30(Thu) 14:34:43|NO.48933

bsaveを使って、変数を保存しているのですが
必要なくなったデータを、ファイル上から
削除する方法は無いのでしょうか?

ネットをしばらく探しましたが、見つからず
この掲示板の過去ログを探しましたが、
同じような質問がないようなので、投稿しました



具体的に言うと、1つ8バイトのデータがあり
後から何度でも追加できるようにしてあります。
1つのファイルに、2つデータを作り
16バイトになって、追加セーブできたのですが
削除したい場合に、どうやっても8バイトに減らせず
削除したデータは0で上書きしている状態になっています。
結果16バイトのままです

FF=データあり 00=データなしとすると 現状 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF           ↓ FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 理想 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF           ↓ FF FF FF FF FF FF FF FF

お願いします



この記事に返信する


fortunehill

リンク

2012/8/30(Thu) 16:28:28|NO.48936

確保されている配列に依存します dim で 4Byte sdim で 64Byte が最小でしょうか
sdim の場合 64Byte 以上は 1Byte 単位で可能ですが。

此の例の場合削除した配列が大きいままなのでヌルが付加されていると思います
削除した配列分確保量を減らした配列に保存して bsave すれば
最低 4Byte に成るのではないでしょうか?



匿名希望

リンク

2012/8/30(Thu) 18:46:01|NO.48938

bsaveのヘルプを読みましょう。
第2パラメータで保存するサイズを設定できます。
1byteだけ保存することも可能です。



a

リンク

2012/8/30(Thu) 21:24:38|NO.48946

fortunehillさん、匿名希望さん
回答ありがとうございます。

fortunehillさんの回答はsdimで宣言した変数の事でしょうか?
自分の文が分かりづらいので、補足しますと
FFだの00だの書かれているのは、変数ではなく
出力した後のファイルです。
つまり1度出力し、ファイルが大きくなった後
ファイルサイズを小さくしたいのです。
すみません、伝えづらいもので
結局よく分からないと思いますが、お願いします


例えると、1つのキャラが HP,攻撃力,防御力のデータを持っているとして 2キャラ作ると、HP、攻撃力、防御力、 それぞれデータが2つずつ、できますよね それをセーブデータとして、ファイルに保存するとしたら いろいろ方法はありますが、今回は1バイトずつ [キャラ1のHP][キャラ1の攻撃力][キャラ1の防御力][キャラ2のHP][キャラ2の攻撃力][キャラ2の防御力] のように並べて保存しています。 16進数にすると FF FF FF FF FF FF 数値はてきとうですが、このようなファイルになると思います このとき、キャラ2を削除した時 FF FF FF 00 00 00 のようになるのが現状です FF FF FF という風に、そもそも00の所のデータを削除する方法はないのでしょうか?


匿名希望さんの回答についてですが
一度ファイルからのデータをすべて
変数に書き出し、必要ない部分を削除し
ファイルを削除した上で、また新たに同名のファイルで保存する
という方法をとるという事でしょうか?

自分も、最終的に手段がなければ
そのようにプログラムを書くかもしれないのですが
他に、ファイルから指定したバイトを直接削除するような
いい手段があれば、と思い質問させていただいております。

長文になってしまい、申し訳ございません。
よろしくお願いします。



ヂオン

リンク

2012/8/30(Thu) 21:37:23|NO.48947

delete 命令を使用すると、ファイルを削除できる。
作りなおすのが吉。

今はこれしか思いつきません。



y.tack

リンク

2012/8/30(Thu) 21:39:15|NO.48948

僕も詳しくないんですけど
size小さく上書きしたいってことですか?

上書き命令はあると便利そうですが
保存操作が何種類もあると使い分けが大変そうで
バイナリ保存はbsaveだけって決まってるのは僕は好きだけどなー

notesaveだとFFFFとかFFFF0000は異なると思うけどな試してないですけど
文字列として保存して読んで数値に変換するのも一つの方法で

>ファイルを削除した上で、また新たに同名のファイルで保存する
>という方法をとるという事でしょうか?
これが一番直観的だと思います
>delete命令を実行する前に exist命令でファイルの有無を確認するようにしてください
コレ忘れずに

最初の頃は少ない命令で実現したいってのもわかりますが
確認して削除して保存って
3STEPなので頑張ってください



ヂオン

リンク

2012/8/30(Thu) 21:41:10|NO.48949

追記ですが、なぜすでに解決状態になっているのですか?

解りにくいので

>>解決したら質問者本人がここをチェックしてください。

のチェックボックスは質問が本当に解決した際にチェックして投稿することをお勧めします。



skyblue

リンク

2012/8/31(Fri) 07:33:57|NO.48958

確か、bsaveの引数に保存サイズが指定できたはずなので
サイズを指定すればヌルをなくすことができます。



a

リンク

2012/8/31(Fri) 08:41:45|NO.48960

ヂオンさん、y.tackさん、skyblueさん
回答、ありがとうございます。

まず、解決状態についてですが
本意ではないです。チェックした覚えがありません
ですが、解決状態になっていたのは、
やっぱり自分が、チェックをつけたまま送信したのかもしれません
申し訳ございません。次からは気をつけます。


skyblueさん、ありがとうございます!
bsaveの保存サイズには、
マイナスが設定できたんですね!盲点でした!
これで解決しました!

ヂオンさん、y.tackさんもありがとうございます!
ファイルを作り直す方法も悪くはないのですが
やはり、大きなファイルとなると、変数に保持するために
容量がとられると思いますので、bsaveで保存サイズを
マイナスにする形をとりたいと思います。

回答してくださった皆様、ありがとうございました!



skyblue

リンク

2012/8/31(Fri) 19:04:23|NO.48973

マイナス?
bsaveの第2引数にあるサイズ=保存したいサイズ
つまり固定サイズを指定するのではなくて可変サイズを指定すれば
ファイルサイズの縮小ができます。
ヘルプによるとマイナス値は変数のサイズとのことなので
マイナス値ではなく文字数+改行などの制御文字の合計を第二引数に指定する。
第3引数はファイルのオフセットなのでマイナスはありえないに等しいです。



a

リンク

2012/9/1(Sat) 08:38:42|NO.48982

bsaveでマイナス値を指定しても
その変数のサイズになっているだけなんですね。
恥ずかしい・・・



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