파일스트림에 직접 쓰세요.
test 님이 쓰신 글 :
: 데이터 14만건 이상 파일을
: 엑셀로 다운받으려고합니다..
: csv 파일 변환시.. out of memory 에러가 발생하여 ㅠㅠ 해결방법을 구하고자 합니다.
: 소스는 아래와 같습니다.
:
:
:
: procedure Tf8030.SaveToCSV(DataSet: TDataSet; FileName: String);
: const
: Delimiter: Char = ';'; // In order to be automatically recognized in Microsoft Excel use ";", not ","
: Enclosure: Char = '"';
: var
: List: TStringList;
: S: String;
: I: Integer;
: function EscapeString(s: string): string;
: var
: i: Integer;
: begin
: Result := StringReplace(s,Enclosure,Enclosure+Enclosure,[rfReplaceAll]);
: if (Pos(Delimiter,s) > 0) OR (Pos(Enclosure,s) > 0) then // Comment this line for enclosure in every fields
: Result := Enclosure+Result+Enclosure;
: end;
: procedure AddHeader;
: var
: I: Integer;
: begin
: S := '';
: for I := 0 to DataSet.FieldCount - 1 do begin
: if S > '' then
: S := S + Delimiter;
: S := S + EscapeString(DataSet.Fields[I].FieldName);
: end;
: List.Add(S);
: end;
: procedure AddRecord;
: var
: I: Integer;
: begin
: S := '';
: for I := 0 to DataSet.FieldCount - 1 do begin
: if S > '' then
: S := S + Delimiter;
: S := S + EscapeString(DataSet.Fields[I].AsString);
: end;
: List.Add(S);
: end;
: begin
: List := TStringList.Create;
: try
: DataSet.DisableControls;
: DataSet.First;
: AddHeader; // Comment if header not required
: while not DataSet.Eof do begin
: AddRecord;
: DataSet.Next;
: end;
: finally
: List.SaveToFile(FileName);
: DataSet.First;
: DataSet.EnableControls;
: List.Free;
: end;
: end;
|