Delphi5 怎么读取txt

从犯 2017-07-25 01:46:50
TXT文本


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 展示这些数据 初学不会做希望给个思路 没分数了 这是我账户最后三十分 希望大佬帮忙
...全文
168 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
从犯 2017-07-27
  • 打赏
  • 举报
回复
引用 4 楼 hongss 的回复:
要 IndexOf 干啥? 我没有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.
谢谢 已经给分 代码 看了 没什么问题 我是Java转的 很多地方不是很熟悉 已经自己弄出来了 和你这个有点不一样 待会看看 先给分了
jjpweb 2017-07-26
  • 打赏
  • 举报
回复
分给4楼吧,这代码没啥挑剔的。
doloopcn 2017-07-26
  • 打赏
  • 举报
回复
........... 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就可以了 .......
hongss 2017-07-25
  • 打赏
  • 举报
回复
要 IndexOf 干啥?

我没有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.


从犯 2017-07-25
  • 打赏
  • 举报
回复
引用 2 楼 hongss 的回复:
能把 SZ 张三 5717全部到了Office,那就可以直接把这个String拿来分解成 SZ 张三 5717 三个字符串,分别赋给三个字符串变量 至于要用DBGrid显示,就直接把这些字符串分别写到相应DBGrid的Cell里就是了
经过尝试 Delphi5好像没有 Indexof这个 function不然我也不会发帖咯 赋值的话我确实不会
hongss 2017-07-25
  • 打赏
  • 举报
回复
能把 SZ 张三 5717全部到了Office,那就可以直接把这个String拿来分解成 SZ 张三 5717 三个字符串,分别赋给三个字符串变量 至于要用DBGrid显示,就直接把这些字符串分别写到相应DBGrid的Cell里就是了
从犯 2017-07-25
  • 打赏
  • 举报
回复
或者说是 DBGrid可以直接绑定TXT文档数据 有什么方法可以达到这个功能

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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