Суббота, 23.11.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нравится раздел статьи?
Всего ответов: 68
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Разные » Примеры Delphi

Работа с CSV файлами в Delphi

Введение

CSV-файл – простейший по организации файл-таблица, который понимает Microsoft Excel. CSV – Como Separated Value – данные, разделенные запятой. Это обычный текстовый файл, в котором каждая строка олицетворяет ряд таблицы, а разделение этого ряда на колонки осуществляется путем разделения значений специальным разделителем. Обычно роль этого разделителя, судя из названия, играет запятая. Однако, встречается и другой разделитель – точка с запятой. Даже в Microsoft не определились, с каким разделителем должен работать Excel. При сохранении какой-либо таблицы в формате CSV, в качестве разделителя используется точка с запятой. Но, при открытии такого файла с помощью Microsoft Excel, нужно быть очень внимательным, так как, не знаю, шутка это или нет, существует, как Вы знаете два способа открытия файла:

  1. В главном меню программы выбрать пункт «Открыть» из меню «файл».
  2. Найти на жестком диске нужный файл и два раза кликнуть на нем мышкой.

Так вот, при открытии CSV файла первым способом, Excel использует точку с запятой в качестве разделителя, а при открытии вторым способом Excel использует запятую в качестве разделителя. Правда в Microsoft Excel XP эта проблема(?) решена, и используется только точка с запятой, не смотря на название файла.

Работа с CSV файлами в Delphi

Для работы с CSV-файлами в Delphi Вам не понадобятся различные сторонние компоненты. Как я уже говорил, CSV-файл – это обычный текстовый файл. Следовательно, для работы с ним мы будем использовать стандартный тип TextFile определенный в модуле system.

Давайте напишем процедуру для загрузки CSV файла в таблицу TStringGrid. Это стандартный компонент Delphi для работы со строковыми таблицами. Находится он на странице Additional в палитре компонентов Delphi.

Вот код этой процедуры:

procedure LoadCSVFile (FileName: String; separator: char);
var f: TextFile;
 s1, s2: string;
 i, j: integer;
begin
 i := 0;
 AssignFile (f, FileName);
 Reset(f);
 while not eof(f) do
 begin
 readln (f, s1);
 i := i + 1;
 j := 0;
 while pos(separator, s1)<>0 do
 begin
 s2 := copy(s1,1,pos(separator, s1)-1);
 j := j + 1;
 delete (s1, 1, pos(separator, S1));
 StringGrid1.Cells[j-1, i-1] := s2;
 end;
 if pos (separator, s1)=0 then
 begin
 j := j + 1;
 StringGrid1.Cells[j-1, i-1] := s1;
 end;
 StringGrid1.ColCount := j;
 StringGRid1.RowCount := i+1;
 end;
 CloseFile(f);
end;

Теперь разберем этот код.

procedure LoadCSVFile (FileName: String; separator: char);

Это заголовок нашей процедуры. В качестве параметров мы передаем ей имя файла и разделитель данных.

 AssignFile (f, FileName);
 Reset(f);

Здесь мы ассоциируем с файловой переменной f имя файла и открываем его для чтения.

while not eof(f) do
 begin
 readln (f, s1);

Пока не достигнут конец файла, читаем из него очередную строку.

Далее нам остается только разделить строку на много строк, используя в качестве разделителя символ separator, и записать эти строки в таблицу, учитывая то, что нужно увеличить число рядов на 1. Это делается следующим кодом:

 while pos(separator, s1)<>0 do
 begin
 s2 := copy(s1,1,pos(separator, s1)-1);
 j := j + 1;
 delete (s1, 1, pos(separator, S1));
 StringGrid1.Cells[j-1, i-1] := s2;
 end;
 if pos (separator, s1)=0 then
 begin
 j := j + 1;
 StringGrid1.Cells[j-1, i-1] := s1;
 end;
 StringGrid1.ColCount := j;
 StringGRid1.RowCount := i+1;

Ну вот, пожалуй, и все что я хотел написать.

Получить ссылку на материал

Категория: Примеры Delphi | Добавил: Барон (20.12.2011)
Просмотров: 4563 | Теги: CSV, файл, delphi | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Delphi.NET [3]
Kylix Delphi for Linux [9]
Советы Дельферу [6]
Хитрости в Delphi [2]
Обзор Delphi [45]
Инсталлятор [11]
Пользовательский интерфейс [18]
Примеры Delphi [93]
Функции и процедуры [15]
Разные [31]
Королевство Delphi © 2010-2024
Яндекс цитирования