Текстовóй файл — компьютерный файл, содержащий текстовые данные, как правило, организованные в виде строк. Текстовой файл, как и прочие файлы, хранится в файловой системе. Текстовым файлам противопоставляются двоичные файлы, в которых содержатся данные, не рассчитанные на интерпретацию в качестве текста (например, файлы, хранящие закодированные звук или изображение).
В отличие от термина «текстовой формат», характеризующего содержимое данных, термин «текстовой файл» относится к самому файлу как контейнеру, хранящему такие данные. Текстовой файл может содержать не только текст как таковой, но и текст с разметкой в виде текстовых пометок — к примеру, HTML-текст.
Описание
Текстовой файл представляет из себя последовательность символов и знаков препинания (принадлежащих тому или иному набору символов). Это символы обычно сгруппированы в строки (англ. lines, rows) (в современных системах строки разделяются разделителями строк, хотя в прошлом применялось хранение строк в виде записей постоянной или переменной длины). Иногда конец текстового файла (особенно если в файловой системе не хранится информация о размере файла) также отмечается одним или более специальными знаками, известными как маркеры конца файла.
Текстовой файл может содержать как форматированный, так и неформатированный текст.
Преимущества и недостатки
Преимущества:
- Минимальный объём файла (при малом количестве текстовых данных).
- Универсальность — текстовый файл может быть прочитан (так или иначе) на любой системе или ОС, особенно если речь идёт об однобайтных кодировках вроде ASCII — они не подвержены многим проблемам, характерным для других форматов файлов — для них не важна разница в порядке байтов или длине машинного слова на разных платформах.
- Устойчивость — каждое слово и символ в таком файле самодостаточны, и если случится повреждение такого файла, то в этом случае обычно легче восстановить данные и продолжить обработку остального содержимого — повреждение любого из байтов такого файла никак не сказывается на сохранность остальных, в отличие от или сжатых или двоичных (напр. *.doc). Многие распространённые системы управления версиями (например в MS Word) рассчитаны на текстовые файлы, и с двоичными файлами могут работать только как с единым целым — при повреждении даже нескольких байтов такой файл восстановлению не подлежит.
Недостатки:
- Недостатком больших (и несжатых) текстовых файлов является их низкая информационная энтропия — эти файлы занимают больше места, нежели минимально необходимо. Именно это, однако, и определяет высокую устойчивость к сбоям в каналах передачи данных и при воспроизведении данных с носителей, например с магнитной ленты. Однако эта устойчивость почти не автоматизируема: некоторые ошибки можно находить автоматически, но восстанавливать текст приходится вручную.
- Некоторые операции с текстовыми файлами чрезвычайно неэффективны. Например, если в файле встретится число, машина должна будет перевести его в свой внутренний формат, вызвав (сравнительно) сложную процедуру конвертации числа. Чтобы перейти на 1000-ю строку, требуется считать 999 строк, идущих до неё. Сложно заменить одну строку другой, и т. д. Поэтому при работе с большими объёмами данных текстовые файлы применяют только как промежуточный формат, обеспечивающий интероперабельность.
Формат текстового файла крайне прост, и его можно изменять текстовым редактором — стандартной программой, имеющейся в наличии во всех ОС и и в практически любом устройстве.
Данный формат является основой при пользовательском конфигурировании ЭВМ с ОС Unix, а именно, с помощью редактирования определённых системных текстовых файлов обеспечивается управление любыми возможностями системы.
Форматы, основанные на текстовых файлах
В силу своей простоты текстовые файлы нередко используются для хранения служебной информации (пример, для логов). Текстовый формат служит основой для многих более специализированных форматов (напр., ini, SGML (а также HTML, XML), TeX, исходные тексты языков программирования).
В текстовом файле текст может храниться как в неформатированном («чистый» текст, может быть форматирован символами псевдографики), так и форматированном формате (самый известный из них — Rich Text Format, .rtf), где к каждому символу может быть применено форматирование (шрифт, начертание, размер и т.п.).
Расширения имён файлов
В MS-DOS и Microsoft Windows для файлов с неформатированным текстом обычно используется расширение «.txt» (также может быть: «.ion» (от desсription), «.diz», «.ini»). Тем не менее, текстовыми могут являться файлы с любым другим расширением или без оного. Например, исходные коды программ обычно хранятся в файлах с расширениями, соответствующими языку программирования, на котором написаны программы («.bas», «.pas», «.c») — это тоже текстовые файлы.
Форматированный тест (текст с разметкой) хранится в файлах с расширениями «.rtf», «.htm», «.html».
Кодировки
8-битный текст
Исторически для кодирования текстовых файлов применялись 7-битный набор символов ASCII, а также 8-битные EBCDIC и различные расширения ASCII. В 8-битных кодовых страницах общепринято использовать в первой половине кодовой таблицы символы, соответствующие ASCII.
Преимуществом 8-битного представления текста является программная простота и независимость от проблем порядка байтов или длины машинного слова на разных платформах.
Недостаток — большое количество различных стандартов, из-за этого проблема несовместимости.
Unicode в текстовых файлах
Применение Unicode в текстовых файлах, хотя в основном решает «проблему кодировок» и стандартизирует употребление управляющих символов, но создаёт свои проблемы. В большинстве современных систем неделимой единицей информации в потоке данных является байт (8 бит), которых для кодирования одного символа из Юникода требуется несколько. В качестве решения применяются несовместимые между собой системы UTF-8 и две версии UTF-16 (UTF-16LE и UTF-16BE с противоположным порядком байтов). Иногда в начало файла добавляют специальный символ-маркер (U+FEFF), позволяющий распознать формат однозначно. UTF-8 имеет преимущество обратной совместимости с ASCII, однако программная обработка текста в UTF-8 усложняется непостоянным размером символа. Также тексты в Юникоде отличаются существенно большей избыточностью, нежели 8-битные.
Управляющие символы
Различные операционные системы придерживаются своего представления перевода строки и конца файла.
В UNIX перевод строки состоит из одного символа LF (0x0A), в Mac OS — из символа CR (0x0D), а в DOS и Microsoft Windows перевод строки кодируется последовательностью двух символов: CR и LF.
В DOS и Microsoft Windows конец файла кодируется символом 0x1A, а в UNIX символ конца файла не употребляется.
Помимо названных, в текстовых файлах применяются такие символы как табуляция (0x09) и перевод страницы (0x0C).
