扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:xm4014 来源:论坛 2007年10月31日
关键字:
procedure TPgCSV.CSVToDataSet; var RecordString, Temp : string; i : Integer; C : LongInt; D : Boolean; F : Real; ErrorResponse : TPgCSVErrorResponse; Buffer : Pointer; begin //create field cache FFieldCache:=TList.Create; //initiate map items FMapItems:=0; //allocate buffer size GetMem(Buffer,FBufferSize); //assign and open CSV file AssignFile(FFile,FCSVFile); SetTextBuf(FFile,Buffer^,FBufferSize); Reset(FFile); //open table if nessecary if FAutoOpen then begin if Assigned(FBeforeOpenTable) then FBeforeOpenTable(Self); FDataset.Open; if Assigned(FAfterOpenTable) then FAfterOpenTable(Self); end; //export to table from CSV file if Assigned(FBeforeExport) then FBeforeExport(Self); //set the counter to zero C:=0; Temp:=ShortDateFormat; ShortDateFormat:=FDateFormat; {**********以下是文本数据导入的核心代码部分,也是我要关心的部分********} FDataset.DisableControls; while (not Eof(FFile)) and (not FStop) do begin //read from CSV Readln(FFile,RecordString); //注意,这里好像差了一点什么东西 //add new record try FDataset.Append; for i:=1 to CountMapItems do if Uppercase(GetMapItem(i,D)) <> Uppercase(FIgnoreStr) then case FDataset.FieldByName(GetMapItem(i,D)).DataType of ftInteger: FDataset.FieldByName(GetMapItem(i,D)).AsInteger:= StrToIntDef(Trim(GetCSVRecordItem(i,RecordString)),FDefaultInt); ftFloat: begin try F:=StrToFloat(Trim(GetCSVRecordItem(i,RecordString))); except F:=FDefaultInt; end; FDataset.FieldByName(GetMapItem(i,D)).AsFloat:=F; end; else if FTrimData then FDataset.FieldByName(GetMapItem(i,D)).AsString:= Trim(GetCSVRecordItem(i,RecordString)) else FDataset.FieldByName(GetMapItem(i,D)).AsString:= GetCSVRecordItem(i,RecordString); end; //post record FDataset.Post; except on E:Exception do if not FSilentExport then raise else if Assigned(FExportError) then begin FExportError(Self,E.Message,C,ErrorResponse); if ErrorResponse = pgcsvAbort then Break; end; end; if Assigned(FOnAddRecord) then FOnAddRecord(Self); if Assigned(FExportProgress) then FExportProgress(Self, C, FStop); Inc(C); end; FDataset.EnableControls; {************以上是文本数据导入的核心代码部分**************} if Assigned(FAfterExport) then FAfterExport(Self); //close table if nessecary if FAutoOpen then begin if Assigned(FBeforeCloseTable) then FBeforeCloseTable(Self); FDataset.Close; if Assigned(FAfterCloseTable) then FAfterCloseTable(Self); end; //close CSV file CloseFile(FFile); //disallocate buffer FreeMem(Buffer); ShortDateFormat:=Temp; //free cache for i:=FFieldCache.Count - 1 downto 0 do Dispose(FFieldCache.Items[i]); FFieldCache.Free; end; |
type ... TPgCSVRegulateStrEvent = procedure (Sender : TObject; var ARecordString: string) of object; ... TPgCSV = class(TComponent) Published property RegulateString : TPgCSVRegulateStrEvent read FRegulateString write FRegulateString; //写完后别忘了按一下ctrl+shift+c ... End; |
... while (not Eof(FFile)) and (not FStop) do begin //read from CSV Readln(FFile,RecordString); //xm4014's modification if Assigned(FRegulateString) then FRegulateString(self,RecordString); //add new record try FDataset.Append; ... |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者