读取文件的内容的问题 ( 积分: 20 )

  • 主题发起人 主题发起人 xhj12077021
  • 开始时间 开始时间
X

xhj12077021

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我现在的代码,现在能实现了从TXT文件从读取信息,我是根据Edit1.Text中字符串中的时间来读取的,如果Edit1.Text中字符串中的时间是2007-05-08 ,我TXT文件中最后的时间是2007-05-08 那么我在MEMO中显示的也就是2007-05-08 这天纪录的内容。如果我Edit1.Text中字符串中的时间是2007-05-01,那么 MEMO中显示的也就是2007-05-01 到2007-05-08 这几天的内容。 请问怎么样写才能只显示Edit1.Text中字符串中的时间对应的内容,其他时间纪录的内容不显示

var
s1,s2,S,ALLText:string;
F:textfile;
nPosBegin,nPosEnd:integer;
begin

Edit1.Text:=ShellTreeView1.Path;
s1:=ExtractFileName(Edit1.Text);
nPosBegin:=Pos(',',s1);
nPosEnd:=LastDelimiter(',',s1);
s2:=Copy(s1,nPosBegin+1,nPosEnd-nPosBegin-1);
// showmessage(s2);

Assignfile(F,'E:/operview参数备份/Readme.txt');
reset(F);
while not EOF (F) do begin
readln(F,S);
if CompareStr(S,s2)=0 then
while not EOF (F) do begin
readln(F,S);
ALLText:=ALLText + S+#13#10;
end;
Memo1.Clear;
memo1.Text:=ALLText;
end;
closefile(F);
end;
 
帮帮忙啊
 
没看懂你前面那个pos(',',s1)是干吗用的,得到的s2是个什么?

还有你那个Readme.txt的格式是什么样的?
 
我的格式是‘大富翁,2007-04-08,你好’这个格式
pos用来提取俩逗号之间的时间。
S2用来保存得到的时间。

Readme.txt
就是我们平时写的记事本。
 
方法一:把文本内容读到另一个memo或TStringList中,然后循环读取TStringList的内容,如果符合条件,则显示之。
方法二:把文本文件按excel文件处理,直接读取excel的内容
 
-_-! 楼主没看懂我的问题

你存到Readme.txt里的东西应该是有个固定格式的吧,比如

时间
修改内容
时间
修改内容
.............
还是说不分行,以某种符号隔开之类的
 

Readme.txt的格式是:
时间
修改内容
时间
修改内容
 
我过滤时间,把所有的都给过滤了
呵呵
 
那就按wzquan说的 用个Tstringlist load进这个txt文件 一行一行判断喽~

var
strs:tstringlist;
i:integer;
begin
strs:=tstringlist.Create;
try
strs.LoadFromFile('readme.txt');
while i<strs.Count-1 do
begin
if strs=s2 then
memo1.Lines.Add(strs[i+1]);
inc(i,2);
end;
finally
end;
end;
 
我按照你说的做了下
不可以的,每按下按钮就消失一部分,直到MEMO没有内容为止。

我用
try
ss:=strtodatetime(S);
showmessage('ok');
except
//finally }
ALLText:=ALLText + S+#13#10 ;
Memo1.Clear ;
memo1.Text:=ALLText;
end;

这样也是错误的,根本运行不了。
单独设置一个按钮用:ss:=strtodatetime(S);是可以的
 
帮帮 看看
 
......不知道你的程序是怎么写的.......

下面是我的测试程序,你可以拿来对比下

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
strs:tstringlist;
i:integer;
begin
strs:=tstringlist.Create; {这个是我生成的测试文件,你看看你的文件是不是这个格式}
try
for i:=99 downto 0 do
begin
strs.Add(datetostr(now-i));
strs.Add('Test - '+inttostr(i));
end;
strs.SaveToFile('d:/Readme.txt');
finally
strs.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
s:string;
strs:tstringlist;
k:boolean; {判断是否开始在memo中显示}
begin
memo1.Lines.Clear;
strs:=tstringlist.Create;
try
strs.LoadFromFile('d:/Readme.txt');
s:=edit1.Text; {我直接在edit中取的时间,你把这部分换成你保存时间的那个s2}
k:=false;
i:=0;
while i<strs.Count-1 do
begin
if not k then
k:=strs=s;
if k then
memo1.Lines.Add(strs[i+1]);
inc(i,2);
end;
finally
strs.Free;
end;
end;

end.
 
TO : hs-kill,
你的代码和我贴上去的,最终的结果是一样的。

可能我说的不清楚。
下面是TXT文件里的内容:
2007-05-10 20-36-52

7878787

2007-05-10 20-38-34

4534354
和妇代会大师傅

2007-05-10 20-40-59

勿忘我
4578


如果我选的时间是“2007-05-10 20-38-34”
那么MEMO中显示的内容就是:

4534354
和妇代会大师傅

下面的这些就不出现在MEMO上面了

2007-05-10 20-40-59

勿忘我
4578


现在咱俩的最后结果都是在MEMO上面显示:
4534354
和妇代会大师傅

2007-05-10 20-40-59

勿忘我
4578
也就是“2007-05-10 20-38-34”这个时间以后的所有内容都显示出来了。

我不想要“2007-05-10 20-38-34”这个时间以后的内容,我要显示的就是“2007-05-10 20-38-34”这个时间的内容,其他时间我不显示。
 
我用ss:=strtodatetime(S);
这个函数怎么不可以啊,如果S为时间,就跳出来,否则继续读下一个字符串。
出错为I/O 错误。
 
哦~~哈哈 原来是这样啊 早点说嘛~~~~嘿嘿 easy,看下面这段

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
strs:tstringlist;
i:integer;
begin
strs:=tstringlist.Create;
try
for i:=99 downto 0 do
begin
strs.Add(datetimetostr(now-i));
strs.Add('Test - '+inttostr(i)+' Begin');
strs.Add('......');
strs.Add('......');
strs.Add('......');
strs.Add('......');
strs.Add('Test - '+inttostr(i)+' End');
end;
strs.SaveToFile('d:/Readme.txt');
finally
strs.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
t1,t2:tdatetime;
strs:tstringlist;
k,
istime:boolean;
begin
memo1.Lines.Clear;
strs:=tstringlist.Create;
try
strs.LoadFromFile('d:/Readme.txt');
t1:=strtodatetime(edit1.Text);
k:=false;
for i:=0 to strs.Count-1 do
begin
istime:=TryStrToDateTime(trim(strs),t2);
if k then
if istime then
break
else
memo1.Lines.Add(strs)
else
k:=t1=t2;
end;
finally
strs.Free;
end;
end;

end.
 
太谢谢你了 hs-kill
另外一点 我发现这样写的,能判断输出不在同一天写的内容,
在同一天不同小时分钟秒的文件,
输出就有问题了。
 
哦 我是为了简单 所以只判断了日期,你要是想判断时间把所有的datetostr还有strtodate换成datetimetostr和strtodatetime
 
转换了的你的代码
我的时间用的是20-40-59
这种格式,转换不了
如果改成20:40:59这样的
就可以了

可是文件夹名称又不让用20:40:59这种形式
呵呵
 
-_-!这样......啊

你的readme.txt里的是哪种格式的时间?应该是20:40:59这种吧
从文件里取出来的是字符串,你用替换把所有的:都替换成-,然后直接去和文件夹名比较字符串就行了
替换可以自己写个简单的,比如下面这个:
procedure replace(var str:string);
var
i:integer;
begin
for i:=1 to length(str) do
if str=':' then
str:='-';
end;
 

Similar threads

回复
0
查看
864
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
923
DelphiTeacher的专栏
D
D
回复
0
查看
715
DelphiTeacher的专栏
D
D
回复
0
查看
676
DelphiTeacher的专栏
D
后退
顶部