固定長ファイルの入出力プログラムを作成しています。
入力時、レコード型を定義し、moveして固定長の各フィールドの値を取得しています。
出力時、レコード型のフィールドをバッファ文字列にプラスで結合して代入しておりますが、
せっかくのレコード型を一括でバッファ文字列に代入して出力する方法はないでしょうか。
また、固定長テキストファイルを出力する場合の王道(?)とはどのような方法なのでしょうか。
・読込処理
var
INPRec: record
INP1: array[0..1] of Char;
INP2: array[0..3] of Char;
end;
buf:String; //読込バッファ
begin
//読込−−−−
Move(buf[1],INPRec,SizeOf(INPRec));
ShowMessage(INPRec.TEST1 + '/' + INPRec.TEST2);
end;
・書込処理
var
OUTRec: record
OUT1: String[2];
OUT2: String[4];
end;
buf:String; //読込バッファ
begin
OUTRec.OUT1 := '11';
OUTRec.OUT2 := '2222';
Buf := OUTRec.OUT1 + OUTRec.OUT2;
//出力−−−−
end;
char定義で統一すれば、一括代入できることは、わかりました。
・書込処理
var
OUTRec: record
OUT1: array[0..1] of Char;
OUT2: array[0..3] of Char;
end;
buf: Array[0..6] of Char; //読込バッファ
Str: String;
begin
Str := '11';
Move (Str[1],TESTRec.TEST1,SizeOf(TESTRec.TEST1));
Str := '2222';
Move(UsStr[1],TESTRec.TEST2,SizeOf(TESTRec.TEST2));
Move(TESTRec,UsChr,SizeOf(UsChr));
//出力−−−−
end;
訂正
char定義で統一すれば、一括代入できることは、わかりました。
・書込処理
var
OUTRec: record
OUT1: array[0..1] of Char;
OUT2: array[0..3] of Char;
end;
buf: Array[0..6] of Char; //読込バッファ
Str: String;
begin
Str := '11';
Move(Str[1],TESTRec.OUT1,SizeOf(TESTRec.OUT1));
Str := '2222';
Move(Str[1],TESTRec.OUT2,SizeOf(TESTRec.OUT2));
Move(TESTRec,UsBuf,SizeOf(UsBuf));
//出力−−−−
end;
> var
> OUTRec: record
> OUT1: array[0..1] of Char;
> OUT2: array[0..3] of Char;
> end;
こんなんじゃないの?
type
TOUTRec= packed record
OUT1: array[0..1] of Char;
OUT2: array[0..3] of Char;
end;
var
OUTRec: TOUTRec;
begin
Move(OUTRec, UsBuf, SizeOf(TOUTRec));
end;
本末転倒してますね...
レコード型を文字列に代入するには、
var UsBuf: String;
Move(OUTRec, UsBuf[1], SizeOf(TOUTRec));
でした.....
ツイート | ![]() |