Иллюстрированный самоучитель по практике программирования

Значения, разделенные запятой

Значения, разделенные запятой (Comma-Separated ValuesCSV), – так называется естественный и широко распространенный способ представления табличных данных. Каждая строка таблицы соответствует строке текста; поля в строке разделены запятыми. Таблица из главы 3, представленная в формате CSV, начиналась бы так:

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Значения, разделенные запятой

Этот формат используется для чтения и записи различными программами, работающими с электронными таблицами. Используется он и на некоторых Web-страницах, например для выдачи справок о биржевых котировках. Одна из популярных страниц с биржевыми курсами представляет информацию примерно так:

Биржевой символ Последние торги Изменения Объем
LU 2:19РМ 86-1/4 +4-1/16 +4.94% 5 804 800
Т 2:19РМ 60-11/16 -1-3/16 -1.92% 2468000
MSFT 2:24РМ 106-9/16 +1-3/8 + 1.31% 11474900

Загружаемый табличный формат

Получать значения с помощью Web-браузера удобно, но долго. Вы запускаете браузер, ждете, потом на вас вываливается поток рекламы, вы выбираете список котировок, опять ждете, ждете, ждете, опять лицезреете рекламу и т. д. – и все для того, чтобы получить несколько чисел. Для дальнейшей обработки значений вам придется повторить весь процесс еще не один раз, а между тем, выбрав ссылку "Download Spreadsheet Format" (скачать в табличном формате), вы сразу получите файл, содержащий в основном ту же самую информацию в виде данных в формате CSV – примерно такого вида (здесь строки откорректированы нами по длине):

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Значения, разделенные запятой

Сразу ясно, что второй способ проще: за вас работает компьютер. Браузеры позволяют вашему компьютеру получать доступ к данным с удаленного сервера, но гораздо лучше получать данные без необходимости муторного личного участия. Надо отметить, что на самом деле все нажимания на кнопки – не более чем некая текстовая процедура: браузер читает некий HTML, вы вводите некий текст, и браузер отсылает его на сервер, получая в ответ какой-то новый HTML. Имея нормальные инструменты и язык программирования, нетрудно добиться получения информации в автоматическом режиме. Вот текст программы на языке Tel, обращающейся к Web-сайту биржевых курсов и возвращающей данные в формате CSV, предваренные несколькими заголовочными строками:

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Значения, разделенные запятой

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Значения, разделенные запятой

Таинственная последовательность f =…, следующая за аббревиатурами биржевых сводок, – недокументированная управляющая строка (аналог первого аргумента printf), определяющая, какие данные требуется получить. Экспериментальным путем мы выяснили, что s задает код акций, 11 – последнюю цену, d – изменение цены по сравнению со вчерашним днем и т. п. Важны здесь не конкретные детали, которые могут всячески меняться, а открывающаяся возможность автоматизации получения нужной информации и преобразования ее в нужный вид без участия пользователя. Пусть работает железный агрегат.

Для того чтобы запустить getquotes, вам потребуются какие-то доли секунды, – это несравненно быстрее, чем возиться с браузером.

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

В нескольких последующих разделах мы создадим три версии библиотеки для чтения и преобразования данных CSV. Попутно мы обсудим аспекты, неизбежно возникающие при проектировании программ, взаимодействующих с другими программами. Так, например, оказалось, что стандартного определения CSV не существует, поэтому наша реализация не может базироваться на точной спецификации, – это обычная ситуация при проектировании интерфейсов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.