开发者

Pascal : Delphi Length String Command Error

开发者 https://www.devze.com 2023-02-20 12:04 出处:网络
I\'m writing a section of code to read in CSV files and parse information out of them (currently I just have the beginning part of the code which will read in the headers at the beginning of the file.

I'm writing a section of code to read in CSV files and parse information out of them (currently I just have the beginning part of the code which will read in the headers at the beginning of the file. When I try to compile this code I'm receiving an error on the line which takes th开发者_如何学Goe length of the line from file.

The error I'm recieving is: [Error] MCLRandomizer.pas(*): Missing operator or semicolon

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;


Pascal makes no difference between length and Length ... they both are LENGTH

Rename the variable, it messes up the function.


FTR: If you really, really want you can write

length := System.Length(line);

(assuming length is an Integer). I agree with the other posters that that would be a bad idea.


A solution I developed to read a csv file into a record structure (actually an array of records structures) is

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.

the contents of scores.csv:

james,31
jane,23
toby,34
ruth,40


Moreover, Pascal strings at 1, not 0. (copy() statement)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号