Pascal:Delphi长度字符串命令错误

时间:2011-03-28 13:51:09

标签: delphi string pascal

我正在写一段代码来读取CSV文件并从中解析信息(目前我只有代码的开头部分,它将在文件开头的标题中读取。当我尝试编译这段代码我在行上收到一个错误,该错误占用了文件行的长度。

我收到的错误是:[错误] MCLRandomizer.pas( * ):缺少运算符或分号

while not EOF(csvFile) do begin
        i :=0;
        ReadLn(csvFile, line);
        if lineOne = true then begin
          length := Length(line);               //error here
          while length > 0 do begin
            dx := Pos(',', line);
            buffer := Copy(line, 0, dx-1);
            headers[i] := buffer;
            line := Copy(line, dx+1, length);   
            length := Length(line);             //error here
          end;
          lineOne := false;
        end;
      end;

4 个答案:

答案 0 :(得分:11)

Pascal在长度和长度之间没有区别......它们都是LENGTH

重命名变量,它会混淆函数。

答案 1 :(得分:3)

FTR:如果你真的,真的希望你可以写

length := System.Length(line);

(假设length是整数)。我同意其他海报的说法,这是一个坏主意。

答案 2 :(得分:2)

我开发的将csv文件读入记录结构(实际上是记录结构数组)的解决方案是

program read_file_into_array_of_records;

{$APPTYPE CONSOLE}

uses
  SysUtils, StrUtils;



type
    Tscore = record
                name : string [25];
                marks : integer;
              end;

var
    input_file: TextFile;
    file_record : string[100];
    score : array [0..3] of Tscore;
    index : integer;



// function that returns all text up to a comma or the end of the line
function get_value() : string;
var
    comma_pos: integer;
    value: string[100];
begin


    comma_pos := Pos(',', file_record);

    // if comma found cut out all text up to it
    if comma_pos <> 0 then
    begin


        value := leftstr(file_record, comma_pos - 1);


        delete(file_record, 1, comma_pos);
    end
    else
    begin

        // no comma found so just take everything that remains
        value := file_record;
    end;

    get_value := value;


end;


// procedure to fill one record by breaking up the comma separated values
procedure fill_record (index: integer);
begin

    // call the function get_value as many times as needed to get
    // each comma separated value
    score[index].name := get_value();
    score[index].marks := strtoint(get_value());
end;


// procedure to fill array with contents of csv file
procedure fill_array ();
begin


    index := 0;



    while not EoF(input_file) do
    begin


        readln(input_file, file_record);


        fill_record (index);


        index := index + 1;
    end;


end;


// procedure to display contents of array
procedure display_array ();
begin



    for index := 0 to 3 do
    begin


        writeln(score[index].name, ' got ', score[index].marks, ' marks' );
    end;

    readln;

end;


// main prog

begin

    assignfile(input_file, 'scores.csv');

    reset(input_file);

    fill_array ();

    closefile(input_file);

    display_array();

end.

scores.csv的内容:

  

詹姆斯,31个
  简,23
  托比,34
  露丝,40

答案 3 :(得分:0)

此外,Pascal字符串为1,而不是0.(copy()语句)