Библиотека csvlib для ActionScript 3.0

Я уже затрагивал тему про CSV-файлы, а теперь пришло время обратить внимание на использование CSV при создании флеш-приложений. CSV - это простой и удобный способ хранения информации, который может быть востребован и при программировании на ActionScript. Тем более, что для ActionScript 3.0 существует специальная библиотека для работы с CSV - библиотека классов csvlib. Именно о ней мы сегодня и поговорим.

Рассмотрим основные операции с CSV, с которыми нам, скорее всего, придётся столкнуться, если мы всё же решимся воспользоваться библиотекой csvlib.

Загрузка внешнего файла CSV.

Первым дело нам надо создать сам csv-файл. Пусть он у нас будет называться mycsv.csv (подробнее о создании csv-таблиц смотрите тут).

Файл CSV:

id,name,score 1,Игрок №1,10 2,Игрок №2,5 3,Игрок №3,12 4,Игрок №4,3 5,Игрок №5,13

А теперь загрузим наш файл mycsv.csv в флеш-приложение.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создание экземпляра класса CSV */ var csv:CSV = new CSV(); /* начинаем загрузку csv-файла и ловим момент окончания загрузки */ csv.addEventListener(Event.COMPLETE, onComplete); csv.load(new URLRequest('mycsv.csv')); function onComplete(event:Event) { /* одномерный массив с заголовками таблицы */ trace(csv.header); /* многомерный массив с содержимым таблицы */ trace(csv.data); }

Как видите, ничего сложного.

По-умолчанию ожидается таблица с заголовком (заголовком в CSV-таблице является первая строка-запись, в которой хранятся названия всех полей данной таблицы). Если заголовка нет, то надо это явно указать с помощью свойства embededHeader. А если мы этого не сделаем, то парсер посчитает за заголовок первую запись в таблице, что, конечно, неправильно.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создание экземпляра класса CSV */ var csv:CSV = new CSV(); /* явно указываем, что таблица не имеет заголовка */ csv.embededHeader = false; /* начинаем загрузку csv-файла и ловим момент окончания загрузки */ csv.addEventListener(Event.COMPLETE, onComplete); csv.load(new URLRequest('mycsv2.csv')); function onComplete(event:Event) { /* многомерный массив с содержимым таблицы */ trace(csv.data); }

Сам же файл mycsv2.csv будет выглядеть следующим образом (сравните его с файлом mycsv.csv и заметите отсутствие заголовка).

Файл CSV:

1,Игрок №1,10 2,Игрок №2,5 3,Игрок №3,12 4,Игрок №4,3 5,Игрок №5,13

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

- fieldSeperator - отвечает за символ-разделитель между полями таблицы (по-умолчанию таким символом является запятая);

- recordsetDelimiter - отвечает за символ-разделитель между записями в таблице (по-умолчанию - невидимый \r - символ возврата каретки);

- fieldEnclosureToken - отвечает за символ-разделитель, обозначающий границы отдельной ячейки таблицы (по-умолчанию - одинарные кавычки).

А теперь для тренировки создадим csv-файл с нестандартными разделителями и загрузим его в флеш-проект.

Файл CSV:

id;name;score#1;Игрок №1;11#2;"человек, пожелавший остаться неизвестным";5#3;Игрок №3;12#4;Игрок №4;3#5;Игрок №5;13#

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создание экземпляра класса CSV */ var csv:CSV = new CSV(); /* считываем и меняем разделитель полей */ trace(csv.fieldSeperator) csv.fieldSeperator = ';'; /* считываем и меняем символ-разделитель, обрамляющий ячейку */ trace(csv.fieldEnclosureToken) csv.fieldEnclosureToken = '"'; /* считываем и меняем разделитель записей */ trace(csv.recordsetDelimiter) csv.recordsetDelimiter = '#'; /* начинаем загрузку csv-файла и ловим момент окончания загрузки */ csv.addEventListener(Event.COMPLETE, onComplete); csv.load(new URLRequest('mycsv2.csv')); function onComplete(event:Event) { /* одномерный массив с заголовками таблицы */ trace(csv.header); /* многомерный массив с содержимым таблицы */ trace(csv.data[1]); }

Создание CSV-файла.

Используя данную библиотеку, мы в любой момент можем создать новый csv-документ. Например, мы может специально отформатированную строку превратить в CSV. Делается это довольно просто.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* присваиваем строку, которую нам надо превратить в CSV */ csv.data = 'id,name,score\r1,Игрок №1,11\r2,Игрок №2,5\r3,Игрок №3,12\r4,Игрок №4,3\r5,Игрок №5,13\r'; /* превращаем строку в CSV */ csv.decode(); /* проверяем CSV */ trace(csv.data[0][1]);

Обратите внимание на строку, которую мы превращаем в CSV. Она должна полностью соответствовать структуре csv-файла и содержать все необходимые разделители.

Существует и альтернативный способ создания csv-документа, при котором новые записи по одной добавляются к таблице.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['2','Игрок №2','11']); /* проверяем */ trace(csv.header); trace(csv.data[0]);

Метод addRecordSet() может иметь второй параметр, который отвечает за положение данной записи в таблице. Сравните работу предыдущего кода со следующим:

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['2','Игрок №2','11'],-1); /* проверяем */ trace(csv.header); trace(csv.data[0]);

Как видите, значение '-1' во втором параметре привело к тому, что записи поменялись местами.

Метод getRecordSet() возвращает запись из таблицы в виде массива. В качестве параметра данный метод принимает индекс записи, которую надо извлечь.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['2','Игрок №2','11']); /* считываем записи из CSV */ trace(csv.getRecordSet(0)); trace(csv.getRecordSet(1)); trace(csv.getRecordSet(1)[1]);

Удаление записей из CSV.

Метод deleteRecordSet() удаляет запись (или записи) из таблицы. Если надо удалить только одну запись, то передайте данному методу в качестве параметра индекс этой записи. А если надо удалить несколько идущих друг за другом записей, то передайте в качестве параметра два значения: начальный и конечный индекс удаляемых записей.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['2','Игрок №2','11']); /* удаляем запись */ csv.deleteRecordSet(0); /* проверяем */ trace(csv.data);

Поиск записей в CSV.

Для поиска похожих записей в таблице можно использовать метод search(). Он может принимать два параметра: искомая запись и булево значение, которое отвечает за удаление результатов-дубликатов.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['2','Игрок №2','11']); csv.addRecordSet(['3','Игрок №3','22']); /* ищем похожие записи в таблице */ trace(csv.search(['1','Игрок №1','22']));

Сортировка записей в CSV.

Метод sort() позволяет отсортировать записи в таблице. Для примера отсортируем записи по полю id.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['3','Игрок №3','4']); csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['2','Игрок №2','11']); /* сортируем */ csv.sort(0); /* проверяем */ trace(csv.data)

или

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['3','Игрок №3','4']); csv.addRecordSet(['2','Игрок №2','11']); /* сортируем */ csv.sort('id'); /* проверяем */ trace(csv.data)

А теперь отсортируем в обратном порядке.

Код ActionScript 3.0:

/* подключение библиотеки */ import com.shortybmc.data.parser.CSV; /* создаём экземпляр класса */ var csv:CSV = new CSV(); /* устанавливаем заголовок таблицы */ csv.embededHeader = false; csv.header = ['id', 'name', 'score']; /* добавляем записи в таблицу */ csv.addRecordSet(['3','Игрок №3','4']); csv.addRecordSet(['1','Игрок №1','22']); csv.addRecordSet(['2','Игрок №2','11']); /* сортируем */ csv.sort(0,'DES'); /* проверяем */ trace(csv.data)

Исходник к данному уроку под Adobe Flash CS5.5 и саму библиотеку классов csvlib скачать можно здесь.

Автор: admin

Дата добавления: 2011-12-13

Просмотров: 3161

Рейтинг поста: +5-

Правила перепечатки

Социальные закладки:
Комментарии:
К данной заметке комментариев пока нет. Ваш комментарий может стать первым.
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика