Variables Pascal ReadLn多个变量类型

Variables Pascal ReadLn多个变量类型,variables,types,pascal,readline,Variables,Types,Pascal,Readline,我的问题是这样的。我得到了一个包含数据的文件(输入)“文本编号”在每行上,我需要使用ReadLn(myfile、string、string2、real1(或double)、real2(或double))从中获取数据;,正如您在下面提供的代码中所看到的,但是当我使用刚才描述的函数执行此操作时,会出现错误我需要将每个数据放在单独的变量中。我需要处理数字(乘法,求和),我需要输出(结果)文件的名称和姓氏,其中输入文件中的每一行的数据将类似于“名称姓氏number1(来自输入文件)乘以number2(来

我的问题是这样的。我得到了一个包含数据的文件(输入)“文本编号”在每行上,我需要使用ReadLn(myfile、string、string2、real1(或double)、real2(或double))从中获取数据;,正如您在下面提供的代码中所看到的,但是当我使用刚才描述的函数执行此操作时,会出现错误我需要将每个数据放在单独的变量中。我需要处理数字(乘法,求和),我需要输出(结果)文件的名称和姓氏,其中输入文件中的每一行的数据将类似于“名称姓氏number1(来自输入文件)乘以number2(来自输入文件)”,最后一行将是“总计:求和(所有行(number1*number2))”我唯一需要帮助的问题是将每行数据从初始文件读取到一个单独的变量。

文件说明:

  • 姓名姓氏数值(doubletype)数值(doubletype)

    例如:某人姓氏86.5 9.85

我总是在尝试读取行数据时出错,如下所示:

procedure TForm1.Button1Click(Sender: TObject);
var
  f: TextFile;
  fn: string;

  Lines: Integer;
  i: Integer;
  first, last: string;
  R1, R2, Total: Real;

  function ReadName: string;
  var
    c: Char;
  begin
    Result := '';
    repeat
      Read(f, c);
      Result := Result + c;
    until c = ' ';
  end;

begin
  fn := 'data.txt';
  AssignFile(f, fn);
  Reset(f);
  Read(f, Lines);
  Readln(f);
  Total := 0;
  for i := 1 to Lines do begin
    first := ReadName;
    last := ReadName;
    Read(f, R1, R2);

// do whatever necessary with names & numbers
//    showmessage(first + ' ' + last + ' - ' + FloatToStr(R1 * R2));

    Total := Total + R1 * R2;
    Readln(f);
  end;
// do whatever necessary with Total
//  ShowMessage(FloatToStr(Total));

  CloseFile(f);
end;
  • ReadLn(filevar(:text),name(:字符串数组[25]),姓氏(:字符串数组 字符串[25]),数值1(:real),数值2(:real

    例如:ReadLn(数据、名称[]、sur[]、仪表、价格)

当我尝试同样的方法,但将数值更改为整数(也在文件中)后:

在文件中所做的更改:

  • 姓名姓氏数值(整数类型)数值(整数类型)

    某个姓86 9的人

程序代码如下所示:

procedure TForm1.Button1Click(Sender: TObject);
var
  f: TextFile;
  fn: string;

  Lines: Integer;
  i: Integer;
  first, last: string;
  R1, R2, Total: Real;

  function ReadName: string;
  var
    c: Char;
  begin
    Result := '';
    repeat
      Read(f, c);
      Result := Result + c;
    until c = ' ';
  end;

begin
  fn := 'data.txt';
  AssignFile(f, fn);
  Reset(f);
  Read(f, Lines);
  Readln(f);
  Total := 0;
  for i := 1 to Lines do begin
    first := ReadName;
    last := ReadName;
    Read(f, R1, R2);

// do whatever necessary with names & numbers
//    showmessage(first + ' ' + last + ' - ' + FloatToStr(R1 * R2));

    Total := Total + R1 * R2;
    Readln(f);
  end;
// do whatever necessary with Total
//  ShowMessage(FloatToStr(Total));

  CloseFile(f);
end;
  • ReadLn(filevar(:text),name(:字符串数组[25]),姓氏(:字符串数组 字符串[25]),numeric1(:整数),numeric2(:整数

    例如:ReadLn(数据、名称[]、sur[]、仪表、价格)

程序几乎按预期工作(numeric1接受两个数值,第二个保留为空)

下面是我在代码方面取得的进展:

program test;
type    mas = array[1..30] of real;
        mas1 = array[1..30] of string[25];

var name,sur:mas1;
    atl:mas;
    meters,price,total:integer;
    i,p,n       :integer;
    data      :text;
begin
    Assign(data, 'somefile.txt');
    Reset(data);
    ReadLn(data,n);
    for i:=1 to n do
        begin
                  ReadLn(data, name[i], sur[i], meters, price);
                  WriteLn(name[i],meters, price);
        end;
    Close(data);
    ReadLn;
end.
先谢谢你。我之前也做过类似的文章,但解决方案不适合学校的需要(对他们来说太复杂了-。-)我需要使用简单的ReadLn方法,其中包含4个变量(或者2或3,如果我错了)。无论如何,请原谅我两次发布相同的问题

请原谅我的格式、拼写和想法问题。我很困。希望这次我能说清楚。

(回答第一段时,肯在对问题的评论中陈述了原因)

根据法律,你应该能够做到这一点。
ReadLn
过程可以接受数量可变的参数(只有在能够将值读入这些参数时才有意义)

有了两个pascal编译器,我可以在这一行进行测试

ReadLn(f, s1, s2, r1, r2);
编译良好(其中“f”是
文本文件
,“s1”和“s2”是
字符串
s,而“r1”和“r2”是
实数
s)

但要让它工作起来有点困难。如果您提供以下输入(取自您的)

Brat日光浴者5.66 55.4

Delphi将因“无效数字输入(EINOUTROR)”而失败,FPC将因“无效输入(EINOUTROR)”而失败。问题在于我们要读入的字符串变量。我们提供的整行实际上是一个字符串(空格是字符串中完全有效的字符),因此当代码将字符串视为第一个要读入的变量时,它会将整行读取给它

因此,解决方案是提供一个特殊字符来标记字符串的结尾。Ctrl+Z(ASC-dec:26 hex:1A)适用于Delphi(我不知道什么(如果有的话)适用于FPC或其他编译器)。因此,精心编制的文本文件(用于Delphi)如下所示:


编辑: 如果无法控制输入文件的生成方式,并且确定“空格”是字符串变量的分隔符,则可以在循环中逐字符读取字符串变量,直到读取空格为止。例如:

procedure TForm1.Button1Click(Sender: TObject);
var
  f: TextFile;
  fn: string;

  Lines: Integer;
  i: Integer;
  first, last: string;
  R1, R2, Total: Real;

  function ReadName: string;
  var
    c: Char;
  begin
    Result := '';
    repeat
      Read(f, c);
      Result := Result + c;
    until c = ' ';
  end;

begin
  fn := 'data.txt';
  AssignFile(f, fn);
  Reset(f);
  Read(f, Lines);
  Readln(f);
  Total := 0;
  for i := 1 to Lines do begin
    first := ReadName;
    last := ReadName;
    Read(f, R1, R2);

// do whatever necessary with names & numbers
//    showmessage(first + ' ' + last + ' - ' + FloatToStr(R1 * R2));

    Total := Total + R1 * R2;
    Readln(f);
  end;
// do whatever necessary with Total
//  ShowMessage(FloatToStr(Total));

  CloseFile(f);
end;

请编辑您的帖子并修复格式。你的“试图像这样读取数据”是一团混乱,根本不可能(无论如何,对我来说)理解。我试着为你格式化它,但因为我不能理解它,我不能做任何合理的格式化。您的代码示例还包括注释掉的代码,这只会增加更多的混乱,因为对于那些不会说立陶宛语的人来说,您的变量名很难理解(希望我拼写正确:)。如果你能让你的问题更清楚地阅读和理解,你就可以更容易、更快地得到答案。谢谢。:)感谢您通知我并原谅我的错误。无需道歉-我只是想更快地给您答复,而不是批评。:)更好的格式和问题。谢谢。:)您能否再编辑一次,并从您试图读取的文本文件中提供两行示例?另外,是否需要直接读取数组?你能读入单独的变量,然后将它们添加到数组中吗?“你能再编辑一次,并从你试图读取的文本文件中提供两行样本行吗?”当你键入it=D-done时,我可能正在这样做。无论数据如何添加到数组中,我只需要将它们发布到另一个文件中。感谢您的帮助。另外,多行示例数据也会有所帮助。因为我们知道它们不是字符串[25]string[25]double-double,而且它们实际上是什么不能从一行中确定,所以你的问题几乎不可能回答。如果你不能澄清这一点,恐怕我将不得不投票以“不是一个真正的问题”结束它,因为你一直在自相矛盾。注意:刚刚发现了您的另一个问题(您没有链接),它也与这里的所有内容冲突。下定决心想要什么,然后发表一个问题。从你的话