一个文件读取问题?请同仁们帮帮忙!谢谢~!

sunbiao36 2006-11-29 07:14:39
BA
1,2,356
abc,45,654
EA
BB
456,123,78
asd,a,g
EB
BC


EC
现有以上内容的文本文件一个
如何把BA、EA(标识位)之间的内容插入 对应的数据表中
BA、EA 中间内容入A表
BB、EB 中间内容入B表
BC、EC 中间内容入C表
中间的符号区分隔的是要入库的字段值
各位同仁 帮帮忙?
...全文
186 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunbiao36 2006-11-30
  • 打赏
  • 举报
回复
谢谢各位!
有没有简单一点的方法???
老冯 2006-11-29
  • 打赏
  • 举报
回复
for Idx := 0 to High(_Table[2]) do
begin
//插入C表
//C.Fields[0].Value := _Table[2, Idx][0];
//C.Fields[1].Value := _Table[2, Idx][1];
//C.Fields[2].Value := _Table[2, Idx][2];
end;
老冯 2006-11-29
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
_Table: array[0..2] of array of TStrings;
_Row: array[0..2] of Integer;
_TextFile: TextFile;
S: String;
Tag: Integer;
Idx: Integer;
begin
Tag := -1;
_Row[0] := 0;
_Row[1] := 0;
_Row[2] := 0;
AssignFile(_TextFile, 'C:\Test.txt');
Reset(_TextFile);
while not Eof(_TextFile) do
begin
ReadLn(_TextFile, S);
if S = 'BA' then Tag := 0;
if S = 'BB' then Tag := 1;
if S = 'BC' then Tag := 2;
if (S <> 'BA') and (S <> 'EA') and
(S <> 'BB') and (S <> 'EB') and
(S <> 'BC') and (S <> 'EC') then
begin
case Tag of
0:
begin
if S <> '' then
begin
SetLength(_Table[0], _Row[0]+1);
_Table[0,_Row[0]] := TStringList.Create;
_Table[0,_Row[0]].Delimiter := ',';
_Table[0,_Row[0]].DelimitedText := S;
Inc(_Row[0]);
end;
end;

1:
begin
if S <> '' then
begin
SetLength(_Table[1], _Row[1]+1);
_Table[1,_Row[1]] := TStringList.Create;
_Table[1,_Row[1]].Delimiter := ',';
_Table[1,_Row[1]].DelimitedText := S;
Inc(_Row[1]);
end;
end;

2:
begin
if S <> '' then
begin
SetLength(_Table[2], _Row[2]+1);
_Table[2,_Row[2]] := TStringList.Create;
_Table[2,_Row[2]].Delimiter := ',';
_Table[2,_Row[2]].DelimitedText := S;
Inc(_Row[2]);
end;
end;
end;
end;
end;
for Idx := 0 to High(_Table[0]) do
begin
//插入A表
//A.Fields[0].Value := _Table[0, Idx][0];
//A.Fields[1].Value := _Table[0, Idx][1];
//A.Fields[2].Value := _Table[0, Idx][2];
end;

for Idx := 0 to High(_Table[1]) do
begin
//插入B表
//B.Fields[0].Value := _Table[1, Idx][0];
//B.Fields[1].Value := _Table[1, Idx][1];
//B.Fields[2].Value := _Table[1, Idx][2];
end;

for Idx := 0 to High(_Table[1]) do
begin
//插入C表
//C.Fields[0].Value := _Table[2, Idx][0];
//C.Fields[1].Value := _Table[2, Idx][1];
//C.Fields[2].Value := _Table[2, Idx][2];
end;
end;
王集鹄 2006-11-29
  • 打赏
  • 举报
回复
var
vStringList: TStringList;
vTableName: string;
S: string;
I: Integer;
begin
vStringList := TStringList.Create;
vStringList.Text := Memo1.Text; // 载入text
vTableName := '';
for I := 0 to vStringList.Count - 1 do
begin
S := vStringList[I];
S := StringReplace(S, ',', ',', [rfReplaceAll]); // 去掉全角字符
if (Pos(',', S) <= 0 ) then
begin
if (Copy(S, 1, 1) = 'B') then
vTableName := Trim(Copy(S, 2, MaxInt));
end else if vTableName <> '' then
begin
S := StringReplace(S, ' ', '', [rfReplaceAll]); // 去掉空格
S := StringReplace(S, ',', '","', [rfReplaceAll]);
ShowMessage(Format('Insert into %s("%s")', [vTableName, S])); // 测试用
//ADOQuery1.SQL.Text := Format('Insert into %s(%s)', [vTableName, vStringList[I]]);
//ADOQuery1.ExecSQL; //执行插入语句
end;
end;
vStringList.Free;
end;
sunbiao36 2006-11-29
  • 打赏
  • 举报
回复
liangpei2008(逍遥叹) 的方法应该可以,但是我没有操作过!
请多多指点!
谢谢!
sunbiao36 2006-11-29
  • 打赏
  • 举报
回复
是文本文件!
请 高手 多多指点啊!
liangpei2008 2006-11-29
  • 打赏
  • 举报
回复
1.这是csv文件吧,建一个DSN,就能和表一样读取了

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧