Всего на сайте:
166 тыс. 848 статей

Главная | Информатика

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

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

, "250MHz", "400MHz", "Строки"

, "R10000","Pentium II","исходного кода"

С,0.36 sec,0.30 sec,150

Java,4.9,9.2,105

Этот формат используется для чтения и записи различными програм­мами, работающими с электронными таблицами. Используется он и на некоторых 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% 2 468 000
MSFT 2:24РМ 106-9/16 + 1-3/8 + 1,31%  

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

 

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

 

"LU",86.25,"11/4/1998","2:19РМ",+4.0625,

83.9375,86.875,83.625,5804800

"Т",60.6875,"11/4/1998","2:19РМ",-1.1875,

62.375,62.625,60.4375,2468000

"MSFT",106.5625,"11/4/1998","2:24РМ",+1.375,

105.8125,107.3125,105.5625,11474900

 

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

 

# getquotes.tcl: биржевые курсы для Lucent, AT&T, Microsoft

set so [socket quote.yahoo.com 80] ;# соединение с сервером

set q “/d/quotes.csv?s=LU+T+MSFT&f=sl1d1t1c1ohgv"

 

puts $so "GET $q HTTP/1.0\r\n\r\n" ;# послать запрос

flush $so

puts [read $so] ;# считать и вывести ответ

 

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

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

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

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

Предыдущая статья:Упражнение 3-8. Мы видели множество версий этой программы, написанных на раз­личных.. Следующая статья:Прототип библиотеки
page speed (0.013 sec, direct)