Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Импорт CSV файла с помощью TStringlist в Delphi

Delphi , Базы данных , ASCII и CSV

Статья о том, как импортировать файл с расширением .csv (значение "comma-separated values" - переводится как "значения, разделенные запятыми") в среду разработки Delphi с использованием класса TStringList. Это один из самых популярных и удобных методов чтения данных из CSV файлов на языке Object Pascal.

Перед тем как приступить к решению задачи, важно понять основные принципы работы с TStringlist:

  1. TStringList хранит строки в виде списка, который может быть использован для доступа к строкам через индексы.
  2. Содержимое файла .csv обычно состоит из нескольких строк (каждая строка называется "записью" или "строкой"), где каждая запись разделена запятой, а записи сами по себе могут быть разделены переносом строки.

Рассмотрим типовую ошибку, возникающую при чтении файла .csv с помощью TStringlist: код работает без ошибок в среде компиляции, но не может итерировать по строкам в списке. Проблема заключается в том, что цикл, предназначенный для перебора строк, не использует переменную-итератор i, из-за чего цикл становится бесполезным.

Вот пример кода, который решает поставленную задачу:

procedure TOrder_import.Button1Click(Sender: TObject);
var
  SLFile, SLLine: TStringList;
  InputFile: string;
begin
  ProgressBar1.Position := 0;

  if not order_entry.OpenDialog1.Execute then
    Exit; // Если пользователь не выбрал файл, выходим из функции

  AssignFile(F, order_entry.OpenDialog1.FileName);
  try
    SLFile := TStringList.Create;
    try
      SLFile.LoadFromFile(order_entry.Filename); // Загружаем содержимое файла в TStringlist
      SLLine := TStringList.Create; // Создаём вспомогательную строку для декомпозиции строки на части по заданному разделителю
      try
        ProgressBar1.Max := SLFile.Count;
        for var i := 0 to SLFile.Count - 1 do // Проходим по всем линиям в файле
        begin
          SLLine.CommaText := SLFile[i]; // Преобразуем одну строку из списка во внутренний формат с разделителем запятой
          if SLLine.Count < 89 then  // Проверяем, что строка содержит достаточное количество значений (по условию задачи)
            raise Exception.CreateFmt('Not enough fields in line %d', [i]);
          Memo1.Lines.Add(SLLine[4]);   // Выводим отдельные поля из строки в Memo
          Memo1.Lines.Add(SLLine[12]);
          ...
          // Продолжаем по аналогичной схеме для других полей...
          ProgressBar1.StepIt;         // Обновляем индикатор прогресса
        end;
      finally
        SLLine.Free;
      end;
    finally
      SLFile.Free;
      ShowMessage('Import Successful!');
    end;
  finally
    CloseFile(F);
  end;
end;

Обратите внимание, что используется свойство CommaText, которое позволяет преобразовать строку во внутренний формат TStringList с разделителем запятой без необходимости использования дополнительных функций для извлечения строк. Это упрощает код и делает его менее подверженным ошибкам.

Также важно обращать внимание на правильное управление памятью, в частности, использование конструкции finally для освобождения выделенной памяти, которая не была больше нужна после выполнения задачи чтения файла.

Данный пример демонстрирует базовый принцип импорта данных из CSV файлов с помощью TStringlist. Для более сложных задач и оптимизации производительности можно использовать другие подходы, включая работу со потоками ввода-вывода и использование специализированных библиотек для обработки CSV форматов.

Создано по материалам из источника по ссылке.

Статья о том, как импортировать данные из файла .csv в среду разработки Delphi с использованием класса TStringList.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ASCII и CSV ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:50:16/0.0054240226745605/1