有一段人事档案资料archivetxt内容如下
小许男工程师
小吴女助理工程师
小蔡男助理工程师
小牟女工程师
要将它转入数据库archivedbf中archivedbf结构如下
姓名性别年龄职称
怎么办呢?现在通过使用delphi编程很好地解决了这个难题Delphi提供了许多功能强大丰富的字符处理函数和过程常用的有
()function Length(SString)Integer//返回串的长度
()function Copy(SString;IndexCountInteger)String//给出一个字符串中串的拷贝
()function Pos(SubstrString;SString);Integer//查找子串在字符串中的位置
()Procedure Delete(VarSString;IndexCountInteger); //从一个字符串中去除子串
利用Delphi提供的已有函数和过程基础上编制自己的三个函数实现了纯文本格式资料转入数据库功能只要Delphi支持的数据库都可以支持
archivetxt中每行数据为一个字符串字符串中每个被分割的数据为一个字段分割每个字段的字符为分割符这里是空格也可以是;#等符号具体思想是先将字符串进行调整然后把串中每个字符同分割符比较将不是分割符的字符追加到MyStr串中最后得到一个字段的内容通过一个循环就可以将一个字符串分成几个字段
Function Regulate(aStringSepcharstring)string //去掉多余的分割符规范字符串
Function GetSubStr(varsStringstring;SepCharString)String; //得到字符串中一个子串因要改变参数aString的值所以将它用var定义
FunctionGetSubStrNum(aStringSepCharString)Integer;//计算一个字符串要被分割成几个字段
参数aString是所需分割的一个字符串SepChar是分割符
Function RegulateStr(aStringString;SepcharString)String;
var
iNumInteger;
FlagBoolean;
MyStrTempStrString;
begin
Flag:=False;//进行标志去除多余的分割符
Num:=Length(aString);//计算aString串的长度
for i:= to Num do
begin
TempStr:=Copy(aStringi);//取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 aStringStringSepCharStrign)String;
var
MysrtString;
StrLenInteger;
SepCharPsoInteger;
begin
StrLen:=Length(aString);
SepCharPos:=Pos(SepCharaString);//计算分割符在子串中的位置
MyStr:=Copy(aStringSepCharPos-); //将分割符前所有字符放到mystr串中
Delete(aStringSepCharPos);//除去分割符和分割符前的子串
GetSubStr:=MyStr;//返回一个字段
end;
FunctionTformlGetSubStrNum(aStringString;SepCharString)Integer;
var
iInteger;
StrLenInteger;
NumInteger;
begin
StrLen:=Length(aString);
Num:=;
for i:= to StrLen do
if Copy(aStringi) = SepCharthen
Num:=Num+;
GetSubSrtNum:=Num;
end;
有了上面三个函数现在介绍一下具体的应用
首先建立一个窗体Forml加入一个RichEditl(或Menol)一个按钮Buttonl和一个Tablel设置Tablel的属性
TablellDataBase = c:\Archivs
TablellTableName =Archivedbf
分别加入以下程序
Const Space=
ProcedureTFormlFormCreate(SenderTobject);
begin
RichRditlLinesLoadFromFile(Archivetxt);
end;
ProcedureTFormlButtonClick(SenderTobject);
var
ijInteger;
MyLineString;
begin
with Tablel do
begin
Open;
for i:= to RichEditlLinesCount- do
begin
MyLine:=RegulateStr(RicheditlLines[i]Space);
for j:= to Num do
begin
Append;
fileds[j-]aString:=GetSubSrt(MyLineSpace));
post;
end;
end;
end;
end;