【问题标题】:Writing datas to memobox from .txt file using Lazarus freepascal?使用Lazarus freepascal将数据从.txt文件写入备忘录?
【发布时间】:2018-04-05 19:33:48
【问题描述】:

我在学校有一个项目,需要将数据从 .txt 文件写入 Lazarus freepascal 中的“备忘录”。 有这样顺序的数据。

布达佩斯番茄 23 都柏林电视 45 罗斯莱尔投影仪 43

等等

我必须从 .txt 文件中读取这些数据,然后将它们写入 Lazarus freepascal 中的备忘录。 如果我没记错的话,我已经从 .txt 文件中复制了数据,但我不知道如何编写它们。

我已经写了这段代码:

type
cityname:integer;
product:string;
quantity:integer;
var
Form1: TForm1;
ceg:array[1..5] of rektip;
db:integer;

implementation
procedure TForm1.Button1Click(Sender: TObject);
var f:textfile; i:integer; a:char;
begin
assignfile(f,'termek.txt');
reset(f);
readln(f,db);
While not eof(f) do
begin
  readln(f,ceg[i].varosnev,a,ceg[i].termek,a,ceg[i].darabszam);
end;
db:=1;
closefile(f);
end;           


procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
For i:=1 to db do
Memo1.lines.add(ceg[i].varosnev,ceg[i].termek,IntToStr(ceg[i].darabszam));
end;
end;

我想知道如何解决它。

【问题讨论】:

  • 这个确切的问题是我不知道如何将这些数据写入备忘录。

标签: pascal lazarus freepascal


【解决方案1】:

您发布的代码不完整,所以我假设:

type
  rektip = record
    varosnev: string;
    termek: string;
    darabszam: Integer;
  end;

你的方法有很多错误:

readln(f,db);
While not eof(f) do
begin
  readln(f,ceg[i].varosnev,a,ceg[i].termek,a,ceg[i].darabszam);
end;
db:=1;
closefile(f);
end; 

你没有初始化也没有更新i,所以你正在将所有数据读入同一个记录,你甚至不知道哪一个(i可能是100,你将数据写入某处未知——没有ceg[100])。这会导致未定义的行为(这也可能是崩溃)。

执行以下操作:

var
  ceg: array of rektip; 

...

begin
  AssignFile(f, 'termek.txt');
  Reset(f);
  Readln(f, db);
  if db = 0 then
    Exit;
  SetLength(ceg, db);
  i := 0;
  while not eof(f) do
  begin
    Readln(f, ceg[i].varosnev, ceg[i].termek, ceg[i].darabszam);
    Inc(i);
    if i > High(ceg) then
      Break;
  end;
  SetLength(ceg, i); // remove any empty slots.
  CloseFile(f);
end; 

现在您可以将它们放入 TMemo 中:

for i := Low(ceg) to High(ceg) do
begin
  Memo1.Lines.Add(Format('%s %s %d', [ceg[i].varosnev, ceg[i].termek, ceg[i].darabszam])); 
end;

请注意,上面的代码从文件中读取,假定文件如下所示:

3
Budapest tomato 23
Dublin tv 45
Rosslare projector 43

即每个“记录”都在自己的一行中,第一行包含记录的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多