扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:xm4014 来源:论坛 2007年10月31日
关键字:
//中文部分为笔者所作的注释 //注意: //在该控件中,Export代表将文本数据导入到数据库,Import代表从数据库导出到文本。??? 怎么和我理解的 //导入导出概念刚好是反的 :) type //在处理数据产生异常时,可选择继续还是中止 TPgCSVErrorResponse = (pgcsvAbort, pgcsvIgnore); //进程监控事件声明,可以将导入/导出的进度作为参数传出 TPgCSVProgressEvent = procedure (Sender : TObject; AProgress: LongInt; var StopIt: Boolean) of object; //发生异常时的事件处理声明,异常信息通过该接口传给程序员。 TPgCSVExportErrorEvent = procedure (Sender : TObject; Mess: string; RecNo: LongInt; var Response:TPgCSVErrorResponse) of object; TPgCSV = class(TComponent) private FDataset : TDataset; FCSVMap, FCSVFile, FDateFormat, FIgnoreStr : string; FSeprator, FDelimiter, FFieldIndicator : Char; FAutoOpen, FUseDelimiter, FSilentExport, FTrimData, FStop, FEmptyTable : Boolean; FBeforeOpenTable, FAfterOpenTable, FBeforeCloseTable, FAfterCloseTable, FBeforeEmptyTable, FAfterEmptyTable, FBeforeExport, FAfterExport, FBeforeImport, FAfterImport, FOnAddRecord : TNotifyEvent; FExportProgress, FImportProgress : TPgCSVProgressEvent; FExportError : TPgCSVExportErrorEvent; FMapItems, FDefaultInt : Integer; FBufferSize : LongInt; FFieldCache : TList; protected FFile : TextFile; //以下就是我所说的希望封装的部分 function CountMapItems:Integer;//计算映射字符串的字段个数 function GetMapItem(ItemIndex:Integer;var AField:Boolean):string;//提取映射字符串的字段 function GetCSVRecordItem(ItemIndex:Integer;CSVRecord:string):string;//提取CSV文件字符串中的某一字段 function BuildMap:string;//自动创建映射,如果CSVMap一栏为空的话,会由它来产生映射字符串 function ExtractWord(Item: Integer;S, WordDelim: string): string;//提取文本数据字符串/映射字符串中的某一字段 function WordCount(const S ,WordDelim: string): Integer;//计算文本数据字符串/映射字符串中的字段数目 function WordPosition(Item: Integer; const S, SubStr: string): Integer;//计算子字符串在字符串中的位置 public constructor Create(AOwner: TComponent); override; published //properties property Dataset : TDataset read FDataset write FDataset; //设置要导入或导出的目标数据集. property CSVMap : string read FCSVMap write FCSVMap; //CSV 文本数据文件到数据库字段值的映射字符串.控件通过该映射决定文本中的哪些数据要导入及要导入哪个字段. property CSVFile : string read FCSVFile write FCSVFile; //CSV 文件格式,其实就是文本数据文件。CSV代表什么意思?呵呵,我也不知道 property Seprator : Char read FSeprator write FSeprator; //分隔符,可以是空格,也可以是,、;、#等符号 property FieldIndicator : Char read FFieldIndicator write FFieldIndicator; //字段标识符. property AutoOpen : Boolean read FAutoOpen write FAutoOpen; //将AutoOpen设为True可以在处理数据前自动打开要导入的数据表并在操作完毕后自动关掉它。 property IgnoreString : string read FIgnoreStr write FIgnoreStr; //忽略纪录的标识串. //举例来说 //IgnoreString:='(ignore)'; //CSVMap:='$Name,(ignore),$Age'; //在这种情况下,CSVToDataSet方法,即导入数据方法将忽略文本文件中的第二列的字段。 property Delimiter : Char read FDelimiter write FDelimiter; //在某些CSV文档中标识字符串纪录的标识符,比如,"john","boy",12中的",在这种情况下,TPgCSV //会忽略这些标识符。 property EmptyTable : Boolean read FEmptyTable write FEmptyTable; //只在从数据库导出(DataSetToCSV)方法中有效,作用是创建一个新的CSV文件。 property UseDelimiter : Boolean read FUseDelimiter write FUseDelimiter; //是否有Delimiter。 property SilentExport : Boolean read FSilentExport write FSilentExport; //若该属性为True,应用程序将不显示数据操作时的异常,而将异常信息通过一个接口传给程序员处理. property DateFormat : string read FDateFormat write FDateFormat; //设定CSV文件中日期数据的格式。 property TrimData : Boolean read FTrimData write FTrimData; //是否去掉数据头尾的空格. property DefaultInt : Integer read FDefaultInt write FDefaultInt; //整/实形数据转换出错后的默认值 property BufferSize : LongInt read FBufferSize write FBufferSize; //CSV 文件的缓冲值,以字节为单位,可以加快导入和导出数据的速度。 //events property BeforeOpenTable : TNotifyEvent read FBeforeOpenTable write FBeforeOpenTable; property AfterOpenTable : TNotifyEvent read FAfterOpenTable write FAfterOpenTable; property BeforeCloseTable : TNotifyEvent read FBeforeCloseTable write FBeforeCloseTable; property AfterCloseTable : TNotifyEvent read FAfterCloseTable write FAfterCloseTable; property BeforeEmptyTable : TNotifyEvent read FBeforeEmptyTable write FBeforeEmptyTable; property AfterEmptyTable : TNotifyEvent read FAfterEmptyTable write FAfterEmptyTable; property BeforeImport : TNotifyEvent read FBeforeImport write FBeforeImport; property AfterImport : TNotifyEvent read FAfterImport write FAfterImport; property BeforeExport : TNotifyEvent read FBeforeExport write FBeforeExport; property AfterExport : TNotifyEvent read FAfterExport write FAfterExport; property ExportProgress : TPgCSVProgressEvent read FExportProgress write FExportProgress; //进程监控事件。每完成一条文本数据的导入就触发该事件。 property ImportProgress : TPgCSVProgressEvent read FImportProgress write FImportProgress; property OnAddRecord : TNotifyEvent read FOnAddRecord write FOnAddRecord; property ExportError : TPgCSVExportErrorEvent read FExportError write FExportError; //发生异常时交由该事件处理,异常信息通过该接口传给程序员。 //methodes //整个控件的核心内容 procedure CSVToDataset;//将文本导入到数据集的方法 procedure DatasetToCSV;//将数据集的数据导入到文本的方法 end; procedure Register; {略} implementation {略} end. |
test.csv "11","12","13","14" "21","22","23","24" "31","32","33","34" ... |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者