SH 张三 23124
SH 李四 13000
SQ 王五 12312
SZ 小四 34256
HK 小五 12545
HK 七七 8954
SH 阿飞 15542
procedure TForm1.FormCreate(Sender: TObject);
var
TextFileVar:TextFile;
office,name,salary,temp:String;
begin
AssignFile(TextFileVar,'test.txt'); //关联文件
Reset(TextFileVar); //打开文件
Edit1.Text:='';
while not Eof(TextFileVar) do begin
Read(TextFileVar,office,name,salary); //读取一行数据
if((office='SZ')or( office='SH')or( office='HK')) then
begin
Edit1.Text:=Edit1.Text+(office+name+salary);
break;
end;
end;
CloseFile(TextFileVar);
Edit1.Text:=Edit1.Text+(temp);
end;
理想状态是 读取SZ到office 张三到name这样 实际上是 SZ 张三 5717全部到了Office
需求是 DBGrid 展示这些数据 初学不会做希望给个思路 没分数了 这是我账户最后三十分 希望大佬帮忙
7 个解决方案
#1
或者说是 DBGrid可以直接绑定TXT文档数据 有什么方法可以达到这个功能
#2
能把 SZ 张三 5717全部到了Office,那就可以直接把这个String拿来分解成 SZ 张三 5717 三个字符串,分别赋给三个字符串变量
至于要用DBGrid显示,就直接把这些字符串分别写到相应DBGrid的Cell里就是了
至于要用DBGrid显示,就直接把这些字符串分别写到相应DBGrid的Cell里就是了
#3
经过尝试 Delphi5好像没有 Indexof这个 function不然我也不会发帖咯 赋值的话我确实不会
#4
要 IndexOf 干啥?
我没有D5,拿D7给你个DEMO吧,共同学习~~~~
我没有D5,拿D7给你个DEMO吧,共同学习~~~~
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, DBClient, StdCtrls;
type
TForm1 = class(TForm)
DBG_1: TDBGrid;
DS_1: TDataSource;
ds1: TClientDataSet;
btn1: TButton;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
Str: String;
f: TextFile;
sL: TStringList;
CDS: TClientDataSet;
begin
AssignFile( f, 'TEST.txt' );
Reset( f );
sL:= TStringList.Create;
sL.Delimiter:= ' ';
CDS:= TClientDataSet.Create(Self);
CDS.FieldDefs.Add('Addr', ftString, 8, True);
CDS.FieldDefs.Add('Name', ftString, 8, True);
CDS.FieldDefs.Add('Salary', ftString, 8, True);
CDS.CreateDataSet;
CDS.Open;
while not EOF( f ) do
begin
Readln( f, Str );
sL.DelimitedText:= Str;
if( ( sL[0]='SZ' )or( sL[0]='SH' )or( sL[0]='HK' ) ) then
begin
mmo1.Lines.Add( sL[0]+'+'+sL[1]+'+'+sL[2] );
end;
CDS.Append;
CDS.FieldByName('Addr').AsString := sL[0];
CDS.FieldByName('Name').AsString := sL[1];
CDS.FieldByName('Salary').AsString := sL[2];
CDS.Post;
end;
DS_1.DataSet:= CDS;
DBG_1.DataSource:= DS_1;
sL.Free;
CloseFile( f );
end;
end.
#5
...........
StringListRow,StringListCol:TStringList;
begin
StringListRow:=TStringList.Create;
StringListCol:=TStringList.Create;
StringListRow.LoadFormFiel('你的TXT文件路径全称');
for i:=Low(StringListRow) to High(StringListRow) do
begin
StringListCol:=StringListRow[i];
.....
StringListCol[0..2]就是你要的
显示的话建议直接用StringGrid就可以了
.......
StringListRow,StringListCol:TStringList;
begin
StringListRow:=TStringList.Create;
StringListCol:=TStringList.Create;
StringListRow.LoadFormFiel('你的TXT文件路径全称');
for i:=Low(StringListRow) to High(StringListRow) do
begin
StringListCol:=StringListRow[i];
.....
StringListCol[0..2]就是你要的
显示的话建议直接用StringGrid就可以了
.......
#6
分给4楼吧,这代码没啥挑剔的。
#7
谢谢 已经给分 代码 看了 没什么问题 我是Java转的 很多地方不是很熟悉 已经自己弄出来了 和你这个有点不一样 待会看看 先给分了
#1
或者说是 DBGrid可以直接绑定TXT文档数据 有什么方法可以达到这个功能
#2
能把 SZ 张三 5717全部到了Office,那就可以直接把这个String拿来分解成 SZ 张三 5717 三个字符串,分别赋给三个字符串变量
至于要用DBGrid显示,就直接把这些字符串分别写到相应DBGrid的Cell里就是了
至于要用DBGrid显示,就直接把这些字符串分别写到相应DBGrid的Cell里就是了
#3
经过尝试 Delphi5好像没有 Indexof这个 function不然我也不会发帖咯 赋值的话我确实不会
#4
要 IndexOf 干啥?
我没有D5,拿D7给你个DEMO吧,共同学习~~~~
我没有D5,拿D7给你个DEMO吧,共同学习~~~~
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, DBClient, StdCtrls;
type
TForm1 = class(TForm)
DBG_1: TDBGrid;
DS_1: TDataSource;
ds1: TClientDataSet;
btn1: TButton;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
Str: String;
f: TextFile;
sL: TStringList;
CDS: TClientDataSet;
begin
AssignFile( f, 'TEST.txt' );
Reset( f );
sL:= TStringList.Create;
sL.Delimiter:= ' ';
CDS:= TClientDataSet.Create(Self);
CDS.FieldDefs.Add('Addr', ftString, 8, True);
CDS.FieldDefs.Add('Name', ftString, 8, True);
CDS.FieldDefs.Add('Salary', ftString, 8, True);
CDS.CreateDataSet;
CDS.Open;
while not EOF( f ) do
begin
Readln( f, Str );
sL.DelimitedText:= Str;
if( ( sL[0]='SZ' )or( sL[0]='SH' )or( sL[0]='HK' ) ) then
begin
mmo1.Lines.Add( sL[0]+'+'+sL[1]+'+'+sL[2] );
end;
CDS.Append;
CDS.FieldByName('Addr').AsString := sL[0];
CDS.FieldByName('Name').AsString := sL[1];
CDS.FieldByName('Salary').AsString := sL[2];
CDS.Post;
end;
DS_1.DataSet:= CDS;
DBG_1.DataSource:= DS_1;
sL.Free;
CloseFile( f );
end;
end.
#5
...........
StringListRow,StringListCol:TStringList;
begin
StringListRow:=TStringList.Create;
StringListCol:=TStringList.Create;
StringListRow.LoadFormFiel('你的TXT文件路径全称');
for i:=Low(StringListRow) to High(StringListRow) do
begin
StringListCol:=StringListRow[i];
.....
StringListCol[0..2]就是你要的
显示的话建议直接用StringGrid就可以了
.......
StringListRow,StringListCol:TStringList;
begin
StringListRow:=TStringList.Create;
StringListCol:=TStringList.Create;
StringListRow.LoadFormFiel('你的TXT文件路径全称');
for i:=Low(StringListRow) to High(StringListRow) do
begin
StringListCol:=StringListRow[i];
.....
StringListCol[0..2]就是你要的
显示的话建议直接用StringGrid就可以了
.......
#6
分给4楼吧,这代码没啥挑剔的。
#7
谢谢 已经给分 代码 看了 没什么问题 我是Java转的 很多地方不是很熟悉 已经自己弄出来了 和你这个有点不一样 待会看看 先给分了