2009-05-04 7 views
2

古いバージョンのDelphiプロジェクトをいくつか通り抜けてD2009にアップグレードすると、このバージョンが以前のすべてのリリースに大きな改善(Generics.Collections - wow!))されていることがわかりました。これは私が解決することができたが、ソリューションは私がそれができると信じているように半分エレガントではないように見える。 (私はDelphiのコードを約3年間は書いていませんが、その時代にさえも、何が起こっているのかを深く理解するよりもむしろ素人なハッキングだということです)。D2009 charの配列に関する問題 - 私のコードをどのようにして `エレガントに`修正できますか?

私のコードにTFileStreamがあり、そこから読み込みます。ファイルは、以前のDelphiアプリケーションで以前に書かれたもので、ファイルの最初の3文字が有効であると認識するCTRになるようになっています。読者は、最初の3バイトをcharの配列に読み込みます(sizeof(char)は2バイトです)。この配列を文字列として扱い、 'CTR'を読み込むかどうかを調べます。

var ... 
buffer: array[0..2] of char; 
begin 
... 
InStream.read(buffer, 3); 
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end; 
... 

これは、コンパイルされ、それが実質的に6バイト長であるため、等しくない「CTR」これまで動作しますが、今のバッファに使用されます。

私はarray[0..2] of byteにバッファを変更することで、これを固定し、私は次の操作を実行するためにいくつかのより多くのローカル変数を導入しました:

for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009 
if s<>'CTR'... 

だから、基本的に私は、文字列に個々のバイトを回した後、比較んが、そこにこれを行うためのより簡単な方法でなければなりません。あなたはこの問題についていくつかの光を放つことができますか?

答えて

13

あなたは

var 
    buffer: array[0..2] of AnsiChar; 

にあなたのバッファを設定することができますし、以前のようにまったく同じことに読んであげます。

+0

は、チャームとして働いています。ありがとう –

+2

IMHO、array[0..2] of Byteは、より良い意図と一致します。 –

関連する問題