对于arg no.1,pascal错误&var调用var必须完全匹配'

时间:2015-04-20 18:11:56

标签: pascal

我学习制作一个程序,从txt文件中获取数据并将其放在数组中。

以下是其类型:

    type
          ekspedisi = record
          nmeksp : string; // Nama Ekspedisi
          jlp : string; // Jenis layanan pengiriman
          biaya : integer; // Biaya pengiriman per kg
          lp : integer; // per hari
          end;

         ekspedisiku = record
         nom : array [1..100] of ekspedisi;
         end;

和一个简单的算法

procedure getDaftarEkspedisi(var kirim : ekspedisiku);

var 
i,j,k : integer;
eksp : text;
init : string;
garis : array [1..100] of integer;
mark : string;
jeks : integer;
count : integer;

begin
assign(eksp,'ekspedisi.txt');
reset(eksp);
 i := 0;
 k := 1;
 j := 1;
 mark := '|';
 jeks := 10;

writeln('Loading ekspedisi.. ');
while(not(eof(eksp))) do
begin
readln(eksp,init);
i := i + 1;
    for j := 1 to length(init) do
        begin
            if init[j] = mark then
                begin 
                    garis[k] := j;
                    k := k + 1;
                end;
        end;
for i := 1 to jeks do
    begin
        count := ((i-1)*5);
        kirim.nom[i].nmeksp := copy(init,garis[1+count] + 2,garis[2+count]-garis[1+count]-2);
        kirim.nom[i].jlp := copy(init,garis[2+count] + 2,garis[3+count]-garis[2+count]-2);
        val(copy(init,garis[3+count] + 2,garis[4+count]-garis[3+count]-2),kirim.nom[i].biaya);
        val(copy(init,garis[4+count] + 2,garis[5+count]-garis[4+count]-2),kirim.nom[i].lp);
    end;
close(kirim);
writeln('loading sukses.');
end;
 end;       

从该代码中,我收到以下错误

< 166,13>错误:通过var调用arg no.1必须完全匹配:got" ekspedisiku"预期"文字"

好奇地,第166行只是

        close(kirim);

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要将文件句柄传递给close,所以:

close(kirim);

应该是:

close(eksp);

看起来您正在关闭函数中错误位置的文件。它应该很可能是在while循环之后,所以你需要改变:

close(kirim);
writeln('loading sukses.');
end;
end;       

为:

  end;
close(kirim);
writeln('loading sukses.');
end;       

请注意,这个错误可能是因为你的身份搞砸了 - 如果你在正确格式化你的代码时要小心,那么你就不会发生这种错误。