- PR -

テキストデータをバイナリデータに変換する方法

投稿者投稿内容
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-01-29 22:07
諸農です。

Delphiの型無しファイルであろうとも、書き込む情報が
テキストデータならそれはテキストデータとして閲覧可能です。
もう少し他の人にも理解できるように表現された方がいいです。

コードを見ると、AnsiStringを構成している文字を
バイト型に変換して書き込んでいるだけですよね。
#途中に不必要なまでに余計なコードがたくさん含まれていますけど。

で、お尋ねしたいのですが、
自分で書いているコードの意味を理解していますか?

このコードを実行した結果を、テキストエディタで開くと
妙に意味不明な状態になっていますよね。
それがこのコードの本当の結果な状態だと思っていますか?
であるなら、何故そうなるのかを説明してください。
#VCLの仕様を知っている人は、ここでは少ないと思いますから。

BlockWriteがどのような動きをするのか判りますか?
これはレコード単位での書き込みを行います。
レコードのサイズはどこで指定していますか?
まさかとは思いますが、
BlockWrite(F, byBuf, 1);
このコードの1がそうだとは言わないですよね?
これは、書き込むレコードの数を指定しているのですよ。
レコードのサイズは
ReWrite(F);
この文で、明示的に指定する必要があります。
指定がない場合は、書き込むレコードサイズは128バイトになります。
つまり、アップされているDelphiのコードは、無意味に128バイトずつ
書き込んでいるということになります(先頭バイトを除く127バイトが無意味)。

アップされているDelphiのコードにもし仕様書があるなら、
本当にその仕様書通りの動きしているかどうかの確認をしてください。
私は、していないと思います。

仕様書通りなんだというのであれば、
その仕様をここをみている人に理解できるように説明してください。
Pascalの歴史的理由から、型無しファイルが扱うレコードサイズが
デフォルトで128バイトになるなんて、誰もわかりはしません。

BlockWriteで書き込むデータを1バイトずつであることを
想定しているなら、
ReWrite(F);
この文を
ReWrite(F,1);
にしてやってみてください。

結果は元の読み込んだテキストファイルと同じテキストファイルが出来上がります。


---
と、ここまではいいですか?

次にC#で文字を数値に置き換えて、その数値を文字化して書き込むのであれば、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18438&forum=7&12
こっちのトピックが参考になります。(変換の部分だけです)

--追記--
今気付きましたけど、同じ投稿者だったのね(^^;

_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2005-01-29 22:17 ]

[ メッセージ編集済み 編集者: Jubei 編集日時 2005-01-29 22:27 ]
にいやん
会議室デビュー日: 2005/01/25
投稿数: 12
投稿日時: 2005-01-29 22:36
みなさん、いろいろありがとうございます。

諸農さんの数値化のやり方でやってみたいと思います。

説明ベタでいろいろご迷惑をおかけしました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-30 19:30
引用:

にいやんさんの書き込み (2005-01-29 22:36) より:

説明ベタでいろいろご迷惑をおかけしました。


今度から家族、ご両親や兄弟に説明して、「何が聞きたいかわかる?」と質問してから、書き込んでください。

家族への説明は、とても骨が折れます。甘えがあるからです。彼らに2〜3度の説明追加ですむようになれば、ここのほとんどすべての人が追加の質問なしに理解してくれるでしょう。



そんな手間はかけてられない。もっともです。でも、過去の質問で試してみてください。きっと、「自分がわかっていることを他の人もわかっているという前提で話している」みたいなことを言われると思います。

私がここで書いてもわかってもらえないと思います。身近な人から言われてください。そうすれば、何を説明しなければならないか、自然にわかるようになります。
_________________

スキルアップ/キャリアアップ(JOB@IT)