Пособие по практике программирования

http://lemon62.ru/sankt-peterburg/teplichnye kompleksy/cat_2_1960.html          

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

Значения, разделенные запятой (Comma-Separated Values — CSV), — так называется естественный и широко распространенный способ представления табличных данных. Каждая строка таблицы соответствует строке текста; поля в строке разделены запятыми. Таблица из главы 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 не существует, поэтому наша реализация не может базироваться на точной спецификации, — это обычная ситуация при проектировании интерфейсов.

Содержание раздела