怎样每一次读一行的读出一个文本文件的全部内容!

时间:2022-03-29 10:05:43
怎样每一次读一行的读出一个文本文件的全部内容!
var    
    instring:string;
    s:textfile;
begin    
     assignfile(s,extractfilepath(application.ExeName)+'text.txt');
     reset(s);
     readln(s,instring);
     edit1.Text:=instring;
end;

我想每次读一行的读出一个文本文件的全部内容!
   但上面的语句只能总是读第一行。第二行老是读不出。
   怎么把当前的文本指针移到第二行开头呢!
   然后下一次再读出第二行的内容呢!

14 个解决方案

#1


用循环
while not s.eof do
begin
readln(s,instring);
end;

#2


不是这个意思。
  这样的话就把所有的行一起输出了。
  我要的结果是第一次执行时输出第一行。
  第二次执行时输出第二行了。
  。。。。
  以此类推!

#3


var
  instring:string;
  s:textfile;
begin
  assignfile(s,'d:\abc.asm');
  reset(s);
  while not eof(s) do
  begin
    readln(s,instring);
    memo1.lines.Add(instring);
  end;
  closefile(s);
end;

#4


声明一个整型的全局变量CurLine

var
  instring:string;
  s:textfile;
  i:integer;
begin
  assignfile(s,'d:\abc.asm');
  reset(s);
  i:=1;
  while not eof(s) do
  begin
    readln(s,instring);
    if i=CurLine then
      begin     
        inc(CurLine);
        exit;
      end;
    inc(i);
  end;
  closefile(s);
  edit1.Text:=instring;
end;

#5


var
  i: Integer;
  sl: TStringList;
  s: String;  //你的字符串
begin
  sl := TStringList.Create;
  with sl do
  try
    LoadFromFile('你的文件.txt');
    for i:=0 to Count-1 do
      s := sl[i]; //获取本行字符串
  finally
    Free;
  end;
end;

#6


我觉得是楼上说的对的
用TStringlist来实现 先获得文本的行数 然后读取

#7


TStrings操作方便些 但textfile更底层些

#8


严重同意Taken(铁拳) 
一次性读出,而后再处理,即高效,又方便。

#9


//把S声明的全局
var
  Form1: TForm1;
  S: TextFile;
implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  AssignFile(S, ExtractFilePath(Application.ExeName)+'text.txt');
  Reset(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  InString: string;
begin
  if not Eof(S) then
  begin
    Readln(S, InString);
    Edit1.Text := InString;
  end;
end;

#10


private
 slist: TStringList;
 curIndex: integer; //当前的行号


procedure TForm1.FormCreate(Sender: TObject);
begin
   slist := TStringList.create;
   slist.loadFromFile('文件名');

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   resultStr := sList.string(curIndex-1);
   Inc(curIndex);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   slist.free;
end;

#11


for i:=1 to CurLine-1 do
  begin
    readln(f);
  end;
  
for i:=CurLine to CurLine+23 do
  begin
    readln(f,s);
    writeln(s);
  end;

#12


不要用什么TStringList,对于巨型文件比如几十兆,上百兆的文件,TStringList根本就
无能为力。

#13


》一次性读出,而后再处理,即高效,又方便。
对于一个上百兆的文件,word会一次读出?

#14


呵呵!
 感谢大家这么帮在下。无柰小弟我积分太少!只能供出屈屈20分。
 就这么着吧!平分了,
 谢放大家!

#1


用循环
while not s.eof do
begin
readln(s,instring);
end;

#2


不是这个意思。
  这样的话就把所有的行一起输出了。
  我要的结果是第一次执行时输出第一行。
  第二次执行时输出第二行了。
  。。。。
  以此类推!

#3


var
  instring:string;
  s:textfile;
begin
  assignfile(s,'d:\abc.asm');
  reset(s);
  while not eof(s) do
  begin
    readln(s,instring);
    memo1.lines.Add(instring);
  end;
  closefile(s);
end;

#4


声明一个整型的全局变量CurLine

var
  instring:string;
  s:textfile;
  i:integer;
begin
  assignfile(s,'d:\abc.asm');
  reset(s);
  i:=1;
  while not eof(s) do
  begin
    readln(s,instring);
    if i=CurLine then
      begin     
        inc(CurLine);
        exit;
      end;
    inc(i);
  end;
  closefile(s);
  edit1.Text:=instring;
end;

#5


var
  i: Integer;
  sl: TStringList;
  s: String;  //你的字符串
begin
  sl := TStringList.Create;
  with sl do
  try
    LoadFromFile('你的文件.txt');
    for i:=0 to Count-1 do
      s := sl[i]; //获取本行字符串
  finally
    Free;
  end;
end;

#6


我觉得是楼上说的对的
用TStringlist来实现 先获得文本的行数 然后读取

#7


TStrings操作方便些 但textfile更底层些

#8


严重同意Taken(铁拳) 
一次性读出,而后再处理,即高效,又方便。

#9


//把S声明的全局
var
  Form1: TForm1;
  S: TextFile;
implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  AssignFile(S, ExtractFilePath(Application.ExeName)+'text.txt');
  Reset(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  InString: string;
begin
  if not Eof(S) then
  begin
    Readln(S, InString);
    Edit1.Text := InString;
  end;
end;

#10


private
 slist: TStringList;
 curIndex: integer; //当前的行号


procedure TForm1.FormCreate(Sender: TObject);
begin
   slist := TStringList.create;
   slist.loadFromFile('文件名');

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   resultStr := sList.string(curIndex-1);
   Inc(curIndex);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   slist.free;
end;

#11


for i:=1 to CurLine-1 do
  begin
    readln(f);
  end;
  
for i:=CurLine to CurLine+23 do
  begin
    readln(f,s);
    writeln(s);
  end;

#12


不要用什么TStringList,对于巨型文件比如几十兆,上百兆的文件,TStringList根本就
无能为力。

#13


》一次性读出,而后再处理,即高效,又方便。
对于一个上百兆的文件,word会一次读出?

#14


呵呵!
 感谢大家这么帮在下。无柰小弟我积分太少!只能供出屈屈20分。
 就这么着吧!平分了,
 谢放大家!