读文本文件(200分)

  • 主题发起人 主题发起人 Swn
  • 开始时间 开始时间
S

Swn

Unregistered / Unconfirmed
GUEST, unregistred user!
假如有个文本文件的内容为:
1. 被称为“诗仙”的伟大诗人是谁? 李白
2. 被称为“诗圣”的伟大诗人是谁? 杜甫
3. .......
我如何在一个Edit中输入“被称为“诗仙”的伟大诗人是谁?”后,回车就在另一个Edit中显示“李白”。最好有Delphi代码。
 
1.先把文本文件做成一一对应(这种规则可以由自己随意规定);
2.程序启动时,导入文本文件;
3.判断第一个edit中的输入是否在文本文件存在,如果有,在另一个edit中显示结果;
其实像这种一问一答的建一个本地库,操作起来不是更安全;
 
对于
回车就在另一个Edit中显示“李白”
可以使用Edit的OnKeyDown事件


procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
Edit2.Text:='李白';
end;
 
用ini文件很适合的说。
 
function TForm1.Process(S: String): String;
var
I: Integer;
begin
Result := '';
for I := 0 to sl.Count - 1 do
begin
if Pos(Trim(S), sl) > 0 then
begin
Result := Trim(Copy(sl, Pos('?', sl) + 1, MaxInt));
Exit;
end;
end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #$D then
begin
Edit2.Text := Process(Edit1.Text);
end;
end;
 
我想你的意思大概是想把Edit中的问题的答案从文本文件中查出来显示在另一个Edit中,你可以把文本文件先处理一下,把答案用符号括起来:
1. 被称为“诗仙”的伟大诗人是谁? <李白>
2. 被称为“诗圣”的伟大诗人是谁? <杜甫>
3. .......
然后从文本文件查找出查的问题后第一个<>中的内容,显示在另一个Edit中就行了。
 
我的意思就是如Fyx所说,可哪位仁兄能不能写段代码给我,小弟是菜鸟,编不出,谢谢。
 
Croco已经把代码都给出来了,我的思路是用ReadLn, 如果在本行中发现关键字,就返回关键字。
如果要找中文,用Pos可能不行,要用AnsiPos或AnsiStrPos。
 
要不然我们私下谈谈,你把200分给我,我给你完整的代码如何?
*&^&(# 哎哟,我得小心!有烂番茄臭鸡蛋扔过来了!
 
处理一下你的文本文件:
1. 被称为“诗仙”的伟大诗人是谁? <李白>
2. 被称为“诗圣”的伟大诗人是谁? <杜甫>
3. .......

然后:

procedure TForm1.Button1Click(Sender: TObject);
var
i, Counter: integer;
iBegin, iEnd, iLong: integer;
s, sFind: String;
List: TStringList;
begin
sFind := Trim(Edit1.Text);

List := TStringList.Create;
List.LoadFromFile('test.txt');
for Counter := 0 to List.Count - 1 do
begin
S := List[Counter];
i := Pos(sFind, S);
if i <> 0 then
begin
iBegin := Pos('<', S);
iEnd := Pos('>', S);
iLong := iEnd - iBegin;
Edit2.Text := Copy(S, iBegin + 1, iLong - 1);
end;
break;
end;
List.Free;
end;
 
多人接受答案了。
 
后退
顶部