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)
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论