求教大富翁,如何从文件中读字符串到数据库中,急急!!!!!!!!!!!!! (100分)

  • 主题发起人 主题发起人 gingko
  • 开始时间 开始时间
G

gingko

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个图书馆使用的支持机读目录的ISO2709文件格式:文件中含N条记录,每个记录含3个区:
第一区(头标区):24个字符 前0-4字符 为第一条记录的字符数
第二区(目次区):从第25字符即24字符位起,每12个字符位为一个单位,分3、4、5字符共三个部分,
如001001300000表示001字段在内容区从00000字符位开始的0013个字符是001字段的内容
001001300000  005001700013 005字段与001字段的内容连续放在内容区所以005在内容区是
从00013字符位开始读0017个字符为005字段的内容,以下依些类推。
第三区(内容区)表示第二区所指示的内容
出现第一个ASCII码30为第二区与第三区的分隔处,记录之间以ASCII码29为间隔,遇ASCII29为
两条记录的分隔处,开始另一记录
我要从内容区读字符串放到数据库中,请多指教
 
给一个文件的实例:(第一条记录为01055字符数,_012001001089开始为第三区的开始_为ASCII30
_012001001089为001字段内容,以下依些类推...第二条记录为01124字符)
01055nam 2200373 450
0010013000000050017000130100028000300900021000581000041000791010008001201020015001
2810500180014310600060016120000420016720500090020921000310021821500200024922500270
0269320002000296410003400316606004100350606004100391690001600432700001700448701001
7004658010023004829900025005059020031005309200014005619050040005759460022006159460
02200637946002200659_012001001089_20001109102311.8_ _a7-302-03990-
9_dCNY19.60_ _aTP316_b/66(2000)_ _a20000915d2000 ekmy0chiy0120 ea_0
_achi_ _aCN_b110000_ _aak a 000yy_ _ar_1 _a计算机操作系统教程_f张
尧学,史美林编著_ _a2 版_ _a北京_c清华大学出版社_d2000_ _a268页_c图
_d26cm_2 _a清华大学计算机系列教材_ _a有书目(第268页)_ 0_12001 _a清华大学计
算机系列教材_1 _a电子计算机_x操作系统_x高等学校_x教材_1 _a操作系统_x电子计
算机_x高等学校_x教材_ _aTP316-43_v4_ 0_a张尧学_4编著_ 0_a史美林_4编著_

01124nam 2200337 450
0010013000000050017000130100028000300900026000581000041000841010008001251020015001
3310500180014810600060016620000550
 
ISO2709格式转换在图书馆使用为以下格式,但我现在是要将一些字符读到数据库中,所以遇到
难点了,请多指教!!!!!!!
001 012001001089
005 20001109102311.8
102 _aCN|b110000
105 _aak z 000yy
106 _ar
200 1 _a计算机操作系统教程_AJi Suan Ji Cao Zuo Xi Tong Jiao Cheng_e习题解答与实
验指导_f张尧学编著
205 _a第 2 版
 
我要从内容区读字符串放到数据库中,请多指教
 
你是对如何读不清楚还是对如何放到数据库不清楚?
如果分开来两部分都清楚那么先读出到变量里,然后再把变量写道数据库里
 
读出现的问题是大大的,而且指针容易混乱,所以到现在还不能通过,请不吝赐教,
给点实例啦!!!
 
faint,好复杂,只能细心点读啦
 
OpenDialog1.Execute;
AssignFile(hFile,OpenDialog1.FileName);
Reset(hFile);

if copy(OpenDialog1.FileName,length(OpenDialog1.FileName)-3,4)='_end' then
begin
showmessage('此文件已经处理过!');
label5.caption:='';
CloseFile(hFile);
end
else
begin
till:='';
while not Eof(hFile) do
begin
Readln(hFile,m);
len:=length(m);

if Pos(chr(29),m)>0 then //有记录分割符存在//
begin
//把数组的内容存入表中的data字段//
query1.edit;
query1.append;
query1.fieldbyname('data').asString:=till+copy(m,1,Pos(chr(29),m));
till:=copy(m,Pos(chr(29),m),len-Pos(chr(29),m));

end;

s:=query1.fieldbyname('data').asString;
len:=length(s);

s1:=copy(s,1,5);
if s1='' then
l:=0
else

try
l:=strtoint(s1);
except
showmessage('数据错误!');
end;
j:=25;
base:=Pos(chr(30),S);
while j<=l do
begin
zd:=copy(s,j,3);
if zd='010' then
begin
long:=strtoint(copy(s,j+7,5));
data:=copy(s,base+long+4,1);
if data='a' then
begin
data:=copy(s,base+long+5,13);
query1.fieldbyname('ISBN').asString:=data;
end
else
query1.fieldbyname('ISBN').asString:='null';
end;


if zd='215' then
begin
try
long:=strtoint(copy(s,j+7,5));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+5,5);
query1.fieldbyname('page').asString:=data;
end;


if zd='200' then
begin
try
long:=strtoint(copy(s,j+7,5));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+5,10);
query1.fieldbyname('book name').asString:=data;
end;


if zd='700' then
begin
s:=copy(s,1,j-1)+'701'+copy(s,j+3,len-j-2);
query1.fieldbyname('data').asString:=s;
try
long:=strtoint(copy(s,j+7,5));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+5,6);
query1.fieldbyname('author').asString:=data;
end;

if zd='701' then
begin
try
long:=strtoint(copy(s,j+7,5));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+5,6);
query1.fieldbyname('author').asString:=data;
end;


if zd='710' then
begin
s:=copy(s,1,j-1)+'711'+copy(s,j+3,len-j-2);
query1.fieldbyname('data').asString:=s;
try
long:=strtoint(copy(s,j+7,5));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+5,6);
query1.fieldbyname('author').asString:=data;
end;

if zd='711' then
begin
try
long:=strtoint(copy(s,j+7,5));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+5,6);
query1.fieldbyname('author').asString:=data;
end;



if zd='905' then
begin
try
long:=strtoint(copy(s,j+7,5));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+5,6);
query1.fieldbyname('code').asString:=data;

try
long1:=strtoint(copy(s,j+3,4));
except
query1.fieldbyname('tag').asString:='false';
end;
data:=copy(s,base+long+1,long1);
query1.fieldbyname('905').asString:=data;

end;


j:=j+12;
end;

query1.REFRESH;
DBGRID1.REFRESH;
DBmemo1.REFRESH;


end;
label5.caption:='导入完毕!';
CloseFile(hFile);
 
为什么我用下面的语句只能分隔一条记录,帮忙看看
begin
OpenDialog1.Execute;
AssignFile(hFile,OpenDialog1.FileName);
Reset(hFile);
begin
while not Eof(hFile) do

begin
Readln(hFile,m);
len:=length(m);

if Pos(chr(29),m)>0 then //有记录分割符存在//
begin
//把数组的内容存入表中的data字段//
adodataset1.open;
adodataset1.edit;
adodataset1.append;
adodataset1.fieldbyname('data').asString:=copy(m,1,Pos(chr(29),m));
end;
end;
end;

 
接受答案了.
 
后退
顶部