Каждый раз, когда вы открываете электронную таблицу, импортируете CSV-файл или вставляете список в какой-либо инструмент, вы пользуетесь одним незаметным изобретением — разделителем. Это символ, который сообщает компьютеру, где заканчивается один фрагмент данных и начинается следующий. Простая идея, правда? Но история того, как мы пришли к запятым, вертикальным чертам и табуляциям, на удивление интересна.
Что такое разделитель на самом деле?
Разделитель — это любой символ, используемый для отделения полей в потоке текстовых данных. Он проводит границу. Без него строка вроде JohnSmith30NewYork — просто шум. Добавьте запятые, и она превратится в John,Smith,30,New York — формат, который программа действительно может разобрать и использовать.
Эта концепция старше персональных компьютеров. Люди веками использовали разделители в письменных записях — от бухгалтерских книг с линованными столбцами до перфокартных систем начала XX века.
Перфокарты и ранние вычисления
Самые ранние корни истории разделителей восходят к перфокартным табуляционным системам 1880-х годов, неразрывно связанным с именем Германа Холлерита и переписью населения США. Каждая карта представляла собой запись, а физические столбцы выполняли роль разделителей полей. Структура была заложена в само оборудование.
Когда магнитная лента заменила перфокарты, эта физическая структура исчезла. Данные превратились в непрерывный поток символов, и инженерам понадобился новый способ обозначить, где заканчивается одно поле и начинается другое. Именно тогда на сцену вышли специальные символы-разделители.
ASCII и появление управляющих символов
В 1963 году Американская ассоциация стандартов опубликовала первую версию ASCII (American Standard Code for Information Interchange — Американский стандартный код для обмена информацией). ASCII кодировал не только буквы и цифры — он включал набор непечатаемых управляющих символов, специально предназначенных для форматирования данных.
Два из них особенно важны в нашем контексте:
- ASCII 28: разделитель файлов (File Separator, FS)
- ASCII 29: разделитель групп (Group Separator, GS)
- ASCII 30: разделитель записей (Record Separator, RS)
- ASCII 31: разделитель полей (Unit Separator, US)
Это были разделители, созданные специально для этой цели. Проблема заключалась в том, что большинство программ и терминалов той эпохи не отображали и не обрабатывали их единообразно, поэтому разработчики стали использовать печатаемые символы.
Символ Unit Separator (ASCII 31) был буквально создан для разделения полей данных. Большинство современных разработчиков никогда его не использовали, но он по-прежнему присутствует в стандарте.
Как запятая заняла лидирующую позицию
Формат значений, разделённых запятыми, более известный как CSV, стал популярным в 1970-х и 1980-х годах как способ переноса данных между ранними программами электронных таблиц. Мейнфреймы IBM использовали его, ранние версии VisiCalc и Lotus 1-2-3 поддерживали его — и он прижился.
Распространение CSV произошло по практическим причинам:
- Запятую легко набрать на любой клавиатуре.
- В большинстве ранних данных запятые не встречались, поэтому конфликты были редкими.
- Формат читается человеком без какого-либо специального ПО.
- Он не требовал специальной кодировки или работы с бинарными данными.
Разумеется, запятые внутри полей данных сразу создали проблемы. Стандартным обходным решением стало заключение полей в двойные кавычки, что породило собственные крайние случаи. Неудивительно, что инженеры продолжали искать лучшие варианты.
Другие разделители и причины их существования
Различные форматы данных приняли разные разделители в зависимости от характера самих данных. Вот краткое сравнение наиболее распространённых вариантов:
| Разделитель | Символ | Типичное применение |
|---|---|---|
| Запятая | , | CSV-файлы, электронные таблицы, общий экспорт данных |
| Табуляция | \t | TSV-файлы, экспорт из баз данных, данные из буфера обмена |
| Вертикальная черта | | | Лог-файлы, финансовые данные, поля с запятыми |
| Точка с запятой | ; | CSV-файлы в европейских локалях (где запятая — десятичный разделитель) |
| Двоеточие | : | Конфигурационные файлы Unix, пары «ключ-значение» |
Вертикальная черта стала популярной в лог-файлах и конвейерах Unix именно потому, что она почти никогда не встречается в обычном тексте. Точка с запятой закрепилась в европейском ПО, так как во многих странах запятая используется как десятичный разделитель, что делает её ужасным выбором для разбиения числовых данных.
Современные форматы данных по-прежнему опираются на ту же идею
Даже современные форматы — это лишь вариации одной и той же концепции. JSON использует двоеточия для разделения ключей и значений и запятые для разделения пар. XML использует угловые скобки в качестве разделителей вокруг имён элементов. SQL использует запятые в операторах INSERT. Разделитель никуда не делся — он просто приобрёл новый облик.
Если вам нужно переключаться между форматами, хороший онлайн-конвертер разделителей выполнит задачу быстро и без лишних усилий — не нужно писать скрипт для разовой операции.
Ключевые выводы
- Разделители произошли от физических столбцов перфокарт и эволюционировали в управляющие символы ASCII в 1960-х годах.
- ASCII включал специализированные символы-разделители (28–31), но от них в основном отказались в пользу читаемых символов — запятых и вертикальных черт.
- CSV стал доминирующим форматом в 1970–80-х годах благодаря своей простоте, читаемости и удобству ввода с клавиатуры.
- Разные разделители существуют потому, что у разных данных и локалей разные потребности — единого идеального выбора не существует.
- Современные форматы данных, такие как JSON и XML, по-прежнему построены на той же базовой идее использования специальных символов для обозначения границ.
Маленький символ с большой задачей
Легко не обращать внимания на что-то столь обыденное, как запятая или вертикальная черта. Но именно эти символы скрепляют структурированные данные в каждой отрасли, каждой базе данных и каждой электронной таблице на планете. Когда вы в следующий раз воспользуетесь бесплатным конвертером разделителей или откроете CSV-файл, вспомните, что вы прикасаетесь к наследию, уходящему к самым истокам вычислительной техники. Этот маленький разделитель выполняет огромную тихую и важную работу.