如何按一定格式读出一个文本文件中一行(50分)

  • 主题发起人 主题发起人 agangr
  • 开始时间 开始时间
A

agangr

Unregistered / Unconfirmed
GUEST, unregistred user!
我的文本文件中每行文本的格式为:
port com1 19200 1
port com2 19200 0
port ras1 19200 1
........
现在我想将每一行文本读出,并将每一个字段串分别取出赋值给四个变量


 
readln()
然后就判断是否为空格,分别存入变量
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(F, OpenDialog1.FileName); { File selected in dialog }
Reset(F);

Readln(F, S); { Read first line of file }
Edit1.Text := S; { Put string in a TEdit control }
CloseFile(F);
end;
 
如何判断是否为空格呢
 
判断空格用
i=Pos(' ',Str)
if i>0 then
//第i位是空格

//其实你用另一个方法更法
//当你取出每一行后,用StringReplace将所有空格替换为#13#10,将这个结果存入
//StringList,其每个行就是一个单独的值,就是你要存入变量的东西

procedure TForm1.Button1Click(Sender: TObject);
var
l_lst : TStringList;
l_Str : string;
i : Integer;
begin
l_Str := 'port com1 19200 1';
l_lst := TStringList.Create;
try
l_lst.Text := StringReplace(l_Str, ' ', #13#10, [rfReplaceAll]);
for i := 0 to l_lst.Count - 1 do
begin
ShowMessage(l_lst);
end;
finally
l_lst.Free;
end;
end;


 
为什么不用ini
 
procedure xxxx;
var slist:tstrings;
i:integer;
ss,s1,s2,s3,s4:string;
begin
slist:=tstringlist.create;
slist.loadfrom('你的文本文件.txt');
for i:=0 to slist.count-1 do
begin
ss:=trim(slist);
s1:=copy(ss,1,pos(' ',ss)-1);
delete(ss,1,pos(' ',ss)); ss:=trim(ss);
s2:=copy(ss,1,pos(' ',ss)-1);
delete(ss,1,pos(' ',ss)); ss:=trim(ss);
s3:=copy(ss,1,pos(' ',ss)-1);
delete(ss,1,pos(' ',ss)); ss:=trim(ss);
s4:=copy(ss,1,pos(' ',ss)-1);
//这里就是你要的一行的四个变量,快些处理哟,下一个循环后就没有了。
end;
slist.free;
end;



 
测试通过:
procedure TForm1.Button1Click(Sender: TObject);
var
F:Textfile;
str:string;
s:array[0..3] of string;
len:integer;
i,j:integer;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(F, OpenDialog1.FileName); { File selected in dialog }
Reset(F);
while not EOF(f) do
begin
Readln(F, str); { Read first line of file }
for j:=0 to 3 do
begin
str:=trim(str);
i:=pos(' ',str);
if i>0 then
s[j]:=copy(str,1,i-1)
else
s[j]:= str;
str:=copy(str,i+1,length(str)-i);
end;
end;

CloseFile(F);
end;

end;
 
呵呵,快点撒分了,不然不够分了
 
多人接受答案了。
 
function GetFieldString(FileName: String): String;
var
StringList, StringList1: TStringList;
S: String;
i: Integer;
begin
S := '';
StringList := TStringList.Create;
StringList1 := TStringList.Create;
StringList.LoadFromFile(FileName);
for i := 0 to StringList.Count - 1 do
begin
SeparateString(StringList, '^', StringList1);
if StringList1[3] = 'Y' then
S := S + StringList1[1] + ', ';
end;
S := Copy(S, 1, Length(S) - 2) + ' ';
StringList.Free;
StringList1.Free;
Result := S;
end;

留下你的mail和qq
 
to:老人家
你来迟了,分也给了,下次早点
我的qq:19488839
email:agang_r@sina.com
 
后退
顶部