Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

Рассмотрим случай, когда необходимо считывать значения, разделенные точкой с запятой из CSV-файла. Любой текстовый файл (как и ".csv") считывается построчно, строчка за строчкой. После считывания строки, с ней можно произвести необходимые операции, например разбить на отдельные значения разделенные точкой с запятой. Пример кода для работы с CSV-файлом:

{ вспомогательная процедура для обработки отдельной строки }
  procedure ProcStr(const AStr: string);
  var
    I: Integer;
    aBuf: string;
 
    { эта подпроцедура вызывается каждый раз когда из строки было извлечено
      значение отделённое ";" }
    procedure OnDone;
    begin
      if aBuf = '' then Exit;  // игнорируем пустые значения
      // ...
      // здесь работаем с полученным значением, которое хранится в aBuf
      // ...
      aBuf := '';  // затем обнуляем буферную строку
    end;
  begin
    aBuf := '';
    for I := 1 to Length(AStr) do   // проходим по каждому символу строки в цикле
      if aStr[I] <> ';' then        // если текущий символ не ";", то
      begin
        if aStr[I] <> ' ' then      // игнорируем пробелы
          aBuf := aBuf + AStr[I]    // добавляем символ в буферную строку
      end else                      // если дошли до ";", то
        OnDone;                     // работаем с полученным значением
 
    OnDone;  // вызываем завершающую процедуру напоследок
  end;         
 
begin
  // открываем текстовый файл для чтения
  if TextFileOpen('MyCSV.csv''D:\', fomReset, fcpDefault) then
  begin
    while not TextFileEOF do     // цикл с проходом по каждой строке текстового файла
      ProcStr(TextFileReadLn);   // считываем и обрабатываем очередную строку
 
    TextFileClose;               // закрываем файл
  end;
end.

 

Допустим, файл "MyCSV.csv" имеет такую структуру:

id;  value1;  value2
1;   12.5;    12
2;   13.45;   11

, тогда приведенный выше код вызовет подпроцедуру OnDone девять раз. В первом вызове "aBuf" будет равна "id", во втором вызове "value1", в третьем "value2", в четвёртом "1", в пятом "12.5" и т.д.