col이 2개인 스트링그리드의 내용을 파일로 저장하려는데 엔터키가 먹지 않고 계속 이어지면서 저장이 되네요..아무래도 엔터키값을 넣는데 문제가 있는 거 같은데 고수님들의 도움 바랍니다..
procedure TfmFTVDataMgm.FlatSpeedButton1Click(Sender: TObject);
var
sFishFileName, BackupName, sInput : String;
ATextFile : TextFile;
R_File : File;
i, FileHandle, StringLen : Integer;
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
begin
BackupName := ExtractFileName(SaveDialog1.FileName);
BackupName := ChangeFileExt(BackupName, '.BAK');
if not RenameFile(SaveDialog1.FileName, BackupName) then
raise Exception.Create('Unable to create backup file.');
end;
FileHandle := FileCreate(SaveDialog1.FileName);
for i := 1 to sgData.RowCount - 1 do
begin
StringLen := Length(sgData.Cells[1, i]) + 2 + Length(sgData.Cells[2, i]) ;
sInput := '';
sInput := sgData.Cells[1, i] + ' ▶' + sgData.Cells[2, i] + #13#10 ;
FileWrite(FileHandle, sInput, SizeOf(StringLen));
end;
FileClose(FileHandle);
end;
end;
길이 구하는 부분이 잘못된거 같군요...
StringLen := Length(sgData.Cells[1, i]) + 2 + Length(sgData.Cells[2, i]) ;
sInput := '';
sInput := sgData.Cells[1, i] + ' ▶' + sgData.Cells[2, i] + #13#10 ;
FileWrite(FileHandle, sInput, SizeOf(StringLen));
StringLen은 아래 sInput보다 적은 값이 들어가네요... ' ▶'와 #13#10의 크기를 잘못 계산하신거 같네요. 2대신 6이 들어가야맞을거 같구요...
SizeOf(StringLen)은 StringLen의 값이 아닌 StringLen의 형크기인 4가됩니다.
아래와 같이 바꾸어보세요...
sInput := '';
sInput := sgData.Cells[1, i] + ' ▶' + sgData.Cells[2, i] + #13#10 ;
StringLen := Length(sInput) ;
FileWrite(FileHandle, sInput, StringLen);
^^ 항상 즐코하세요...