时间: 2021-07-31 作者:daque
有一段人事档案材料archive.txt,实质如次: 小许男21工程师 小吴女23辅助工程师 小蔡男22辅助工程师 小牟女22工程师 要将它转入数据库archive.dbf中,archive.dbf构造如次: 全名,性别,年纪,简称 如何办呢?此刻经过运用delphi编制程序,很好地处置了这个困难。delphi供给了很多功效宏大,充分的字符处置因变量和进程,常用的有: (1)function length(s:string):integer//归来串的长度 (2)function copy(s:string;index,count:integer):string//给出一个字符串中串的正片 (3)function pos(substr:string;s:string);integer//搜索子串在字符串中的场所 (4)procedure delete(vars:string;index,count:integer); //从一个字符串中去除子串 运用delphi供给的已有因变量和进程普通上体例本人的三个因变量,实行了纯文本方法材料转入数据库功效。只有delphi扶助的数据库都不妨扶助。 archive.txt中每行数据为一个字符串,字符串中每个被分隔的数据为一个字段,分隔每个字段的字符为分隔符,这边是空格,也不妨是,、;、#等标记。简直思维是:先将字符串举行安排,而后把串中每个字符同分隔符比拟,将不是分隔符的字符追加到mystr串中,结果获得一个字段的实质。经过一个轮回,就不妨将一个字符串分红几个字段。 function regulate(astring,sepchar:string):string //去掉过剩的分隔符,典型字符串 function getsubstr(varsstring:string;sepchar:string):string; //获得字符串中一个子串,因要变换参数astring的值,以是将它用var设置。 functiongetsubstrnum(astring,sepchar:string):integer; //计划一个字符串要被分隔成几个字段。 参数:astring是所需分隔的一个字符串,sepchar是分隔符。 function regulatestr(astring:string;sepchar:string):string; var i,num:integer; flag:boolean; mystr,tempstr:string; begin flag:=false;//举行标记,去除过剩的分隔符 num:=length(astring);//计划astring串的长度 for i:=1 to num do begin tempstr:=copy(astring,i,1);//取astring串中的一字符 if tempstr <> sepchar then begin mystr:=mystr+tempstr; flag:=true; end else if(flag = true)then begin mystr:=mystr+tempsrt; flag:=false; end; end; if mystr[length(mystr)] <> sepchar then mystr:=mystr+sepchar; regulatesrt:=mystr; end; function getsubstr(var astring:string,sepchar:strign):string; var mysrt:string; strlen:integer; sepcharpso:integer; begin strlen:=length(astring); sepcharpos:=pos(sepchar,astring);//计划分隔符在子串中的场所 mystr:=copy(astring,1,sepcharpos-1); //将分隔符前一切字符放到mystr串中 delete(astring,1,sepcharpos);//取消分隔符和分隔符前的子串 getsubstr:=mystr;//归来一个字段 end; functiontforml.getsubstrnum(astring:string;sepchar:string):integer; var i:integer; strlen:integer; num:integer; begin strlen:=length(astring); num:=0; for i:=1 to strlen do if copy(astring,i,1) = sepcharthen num:=num+1; getsubsrtnum:=num; end; 有了上头三个因变量,此刻引见一下简直的运用: 1.开始创造一个窗体forml,介入一个richeditl(或menol),一个按钮buttonl和一个tablel,树立tablel的属性: tablell.database = 'c:\archivs' tablell.tablename ='archive.dbf' 2.辨别介入以次步调: const space= '' proceduretforml.formcreate(sender:tobject); begin richrditl.lines.loadfromfile('archive.txt'); end; proceduretforml.button1click(sender:tobject); var i,j:integer; myline:string; begin with tablel do begin open; for i:=0 to richeditl.lines.count-1 do begin myline:=regulatestr(richeditl.lines[i],space); for j:=1 to num do begin append; fileds[j-1].astring:=getsubsrt(myline,space)); post; end; end; end; end;