取得したデータをWORD型で
テキスト形式にして取り出したのですが、
改行の仕方がわからず困っております。
312個の区切りで横に改行し、エクセル等のソフトで
解析したいのですが、どうしたらよろしいですか?
またこの場合、カンマを挿入しCSVで開く方法と
データそのものを改行する方法が思いつくのですが、
どちらが簡単にできますか?
var
data : WORD;
begin
//data取得
・・・・・
Memo1.Lines.Add(Format('%5d', [data]));
end
Memo1.Lines.textで改行は入っていないでしょうか?
カンマ区切りは、Memo1.Lines.Commmatextで取得できます。
ご返答ありがとうございます。
勉強して試みたのですが、
Memo1.Lines.Addとしないと表示させることもできません。
dataは16bitの画像バイナリデータ(312×240)
を読み込んだものです。
読み込みの段階で、312個ずつ読み込む方法に
変更しなければなりませんか?
var
data : WORD;
cnt: WORD;
i,j: WORD;
cbuff: WORD;
begin
i :=0 ;j :=0;
with TFileStream.Create('filename.dat', fmOpenRead) do try
// 2Byte単位で読み込み
// Position := 0;
// textへの書き込み
Memo1.Font.Name := 'MS ゴシック';
while True do begin
cnt := Read(data, Sizeof(data));
if cnt < Sizeof(data) then break;
//得られたデータを表示
Memo1.Lines.Add(Format('%5d', [data]));
if i=312 then
begin
Inc(j);
i := 0;
end;
inc(i) ;
end;
finally
Free;
end;
エクセルのセルの横区切りはタブですんで
str := '123' + Char(VK_TAB) + '456';
Memo1は張り付けただけではタブ入力できないのでプロパティを変更してください。
wanttabsだっけ?そんな感じの何かです。
今ひとつ良く分かってないのですが、
//得られたデータを表示
Memo1.Lines.Add(Format('%5d', [data]) + ',');
とか、
//得られたデータを表示
Memo1.Lines.Add(Format('%5d', [data]));
Memo1.Lines.Add('');
ではだめでしょうか?
このようなことでいいのだろうか?
手抜きなので、動作するとこまでしか見ていません。
var
data: array[0..311] of WORD;
fs: TFileStream;
cnt, i,j: Integer;
lineText: String;
begin
//FileStream
fs := TFileStream.Create('Efilename.dat', fmOpenRead);
Memo1.Lines.BeginUpdate;
try
// 2Byte単位で読み込み
fs.Position := 0;
//クリア
Memo1.Lines.Clear;
//読み込み
cnt := fs.Read(data, Sizeof(data));
while cnt > 0 do begin
lineText := '';
//読み取ったデータ個数
j := Trunc(cnt / SizeOf(WORD));
for i := 0 to j - 1 do begin
//lineText := lineText + Format('%5d', [data[i]]) + ',';
lineText := lineText + IntToHex(data[i], 4) + ',';
end;
//得られたデータを表示
Memo1.Lines.Add(lineText);
//次読み込み
cnt := fs.Read(data, Sizeof(data));
end;
finally
fs.Free;
Memo1.Lines.EndUpdate;
end;
end;
普通に、バイナリエディタを使うというのは、選択肢にないのだろうか?
ツイート | ![]() |