Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Как различить текстовый файл от двоичного?   Найти похожие ветки 

 
SPeller ©   (2004-08-14 17:51) [0]

Подскажите, какие есть алгоритмы определения рода информации в файле? Где можно почитать, посмотреть примеры об этом?


 
TUser ©   (2004-08-14 17:56) [1]

Если встречается №0 - двоичный. Если нет - какой угодно. А понятия эти - семантические, абсолютно надежных алгоритмов, соотвественно, быть не может.


 
GuAV ©   (2004-08-14 18:44) [2]

Раньше AFAIR текстовым считался файл каждый байт которого имел 0 в старшем бите, т.е. русские текстовики не попадали. Сейчас - даже не знаю что понимать под текстом. Например Unicode - текст? RTF - текcт?


 
YurikGL ©   (2004-08-14 18:45) [3]

Можно попробовать по расширению, по заголовку...

Но присодединюсь к > TUser ©   (14.08.04 17:56) [1] что абсолютно-точных алгоритмов быть не может


 
SPeller ©   (2004-08-15 03:30) [4]

Абсолютно точно мне и не надо. Мне бы с бОльшей вероятностью. Причем вне зависимости от расширения. На счет нулевого байта - он может и не быть в двоичном, ззато могут быть #1, #2, #3 и т.п. На счет юникода - его пока что во внимание не принимать и считать двоичным.


 
Fay ©   (2004-08-15 03:35) [5]

Нет файлов "недвоичных". Понятие "текстовые файлы" требует определения. Реши для себя, что это такое и сразу получишь готовый алгоритм. 8)


 
Германн ©   (2004-08-15 03:52) [6]

В первом приближении - изучи таблицу ASCII в первой ее половине. Определи какие коды относятся к "печатным", а какие к "не печатным". Присутствие вышеупомянутых "не печатных" кодов в файле будет явным признаком того, что он не является текстовым в понимании времен ДОСа.


 
Anatoly Podgoretsky ©   (2004-08-15 07:34) [7]

SPeller ©   (15.08.04 03:30) [4]
При таком определении, реши для себя какие коды из 0-31 не могут встретиться в текстовом файле, ну и как встретишь хоть один такой считай, что у тебя файл не текстовый.


 
Anatoly Podgoretsky ©   (2004-08-15 07:37) [8]

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


 
SPeller ©   (2004-08-15 09:12) [9]


> Fay ©   (15.08.04 03:35) [5]
> Нет файлов "недвоичных". Понятие "текстовые файлы" требует
> определения. Реши для себя, что это такое и сразу получишь
> готовый алгоритм.

Да знаю я прекрасно что текстовый файл это тот же двоичный, только данные в нем своеобразные.


> Германн ©   (15.08.04 03:52) [6]
> В первом приближении - изучи таблицу ASCII в первой ее половине.

Я ее и так знаю. И ascii и ansi.


> Anatoly Podgoretsky ©   (15.08.04 07:34) [7]
> SPeller ©   (15.08.04 03:30) [4]
> При таком определении, реши для себя какие коды из 0-31
> не могут встретиться в текстовом файле, ну и как встретишь
> хоть один такой считай, что у тебя файл не текстовый.

Видимо так и придется делать. Просто я думал что если в текстовом файле могу-таки встретиться парочка непечатаемых символов, то чтобы определить это и не заставлять юзера вручную переключать вид. А из символов 0-31, которые могут быть в файле, это 9, 10 и 13.


> Например не считается текстовым файлом - файл с управляющими
> эскейп последовательностями

Это что за последовательности?


 
olookin ©   (2004-08-15 09:16) [10]

А понятия эти - семантические

Интересная терминология. Семантика тоже разная бывает. В том числе, как я представляю, и в бинарных кодах.


 
YurikGL ©   (2004-08-15 09:32) [11]

http://www.yandex.ru/yandsearch?stype=&nl=0&text=%FD%F1%EA%E5%E9%EF+%EF%EE%F1%EB%E5%E4%EE%E2%E0%F2%E5%EB%FC%ED%EE%F1%F2% FF%EC%E8

Эскейп-последовательности предсталяют собой последовательность символов, начинающихся с ASCII-символа ESC (код 0x1B) и следующим за ним различных аргументов. Исторически, подобные последовательности применялись для управления неинтеллектуальными (dumb) терминалами для формирования команд на перевод строки, отступ, табуляция и т.д. В настоящее время широко применяются во многих ОС для формирования различных аттрибутов текста, формирования приглашения командной строки и т.д.


> Anatoly Podgoretsky ©   (15.08.04 07:37) [8]

В добавление к этому - надо решить, являются ли символы, например, псевдографики допустимыми.


 
Anatoly Podgoretsky ©   (2004-08-15 09:47) [12]

Считаются, это ASCII Extended


 
Юрий Зотов ©   (2004-08-15 10:39) [13]

> SPeller ©   (15.08.04 09:12) [9]

> это 9, 10 и 13.

Еще 12 (прогон страницы). Не исключен и 7 (звуковой сигнал). И еще 27 (escape), после которого могут идти, вообще говоря, любые символы - это и есть те самые escape-последовательности (управляющие команды принтера).


 
TUser ©   (2004-08-15 11:04) [14]

☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ - они могут быть в текстовом файле или нет?


> А понятия эти - семантические
>
> Интересная терминология. Семантика тоже разная бывает. В
> том числе, как я представляю, и в бинарных кодах.

Семантическое понятие (в моем понимании) - такая характеристика чего угодна, которая назначается пользователем по своему усмотрению, в соответствии с его (пользователя) представлениями о данном объекте, и не может существовать алгоритма, который определяет эту характеристику. Например понятие "первичный ключ" является семантическим, т.к. уникальность записей по данному набору доменов не позволяет однозначно утверждать, что это набор доменов - ключ или первичный ключ. Например, год рождаения в данном наборе данных может ни разу не повторяться, но проектировщик базы может заявить - повторение здесь возможно, т.е. это не ключ. В данном случае, файл - это набор байт. Понятия "текстовый" и "бинарный" относятся не к содержанию файла, а к методам работы с ним. Это только пользователь может сказать - каким образом обрабатывать информацию из данного файла.
PS. Термин взят из Дейта.


 
YurikGL ©   (2004-08-15 11:26) [15]


> TUser ©   (15.08.04 11:04) [14]

Привожу по памяти

Синтаксис - наука о связях между словами в предложении
Орфография - наука о связях между буквами в слове
Семантика - наука о связях между словами и объектами


 
GrayFace ©   (2004-08-15 12:31) [16]

> 0><¦!¶§-¦^v><L-^Ў - они могут быть в текстовом файле
> или нет?

Конечно.


 
GrayFace ©   (2004-08-15 12:31) [17]

Наверное.


 
SPeller ©   (2004-08-15 13:04) [18]


> надо решить, являются ли символы, например, псевдографики
> допустимыми.

Я намерен использовать только виндовую кодировку, поэтому вопрос о псевдографике у меня не стоит.


> TUser ©   (15.08.04 11:04) [14]
> &#9788;&#9658;&#9668;&#8597;&#8252;¶§&#9644;&#8616;&#8593;&#8595;&#8594;&#8592;&#8735;&#8596;&#9650;&#9660; - они могут быть в текстовом файле или
> нет?

Это в большинстве юникодные символы, их нет в ansi.


> Семантическое понятие ........

Я прекрасно понимаю что всё относительно. Но всё-же попытаться захватить пусть не все, но наиболее распространенные случаи попытаться можно.


> Юрий Зотов ©   (15.08.04 10:39) [13]
> Еще 12 (прогон страницы). Не исключен и 7 (звуковой сигнал).

Думаю что 12 можно оставить, 7 ещё надо подумать, а вот 27 - я думаю надо определить как врага (в моем случае).


 
Anatoly Podgoretsky ©   (2004-08-15 13:07) [19]

Не забудь тогда об конце файла, это для текстовых файлах нормальный символ. Всех врагов выбирай из дивпазона 0..31


 
Anatoly Podgoretsky ©   (2004-08-15 13:15) [20]

Я иы оставил Bel, BS, Tab, LF, FF, CR, EOF


 
GrayFace ©   (2004-08-15 13:44) [21]

Anatoly Podgoretsky ©   (15.08.04 13:15) [20]
Как вы умудрились нажать "и" вместо "б" - они же далеко друг от друга?? :)


 
Anatoly Podgoretsky ©   (2004-08-15 13:59) [22]

Офтопи, уметь надо, не каждому дано :-)


 
GuAV ©   (2004-08-15 20:32) [23]


> Я иы оставил Bel, BS, Tab, LF, FF, CR, EOF

+ #26, если в конце файла?


 
SPeller ©   (2004-08-16 07:52) [24]

Всем большое спасибо за участие, буду делать потихоньку.


 
КаПиБаРа ©   (2004-08-16 08:51) [25]

Можно сделать эвристический анализ на основе "спектрограммы" (процентного состава различных групп байтов) файла.


 
Anatoly Podgoretsky ©   (2004-08-16 08:52) [26]

GuAV ©   (15.08.04 20:32) [23]
Вопрос спорный, по определению EOF может быть в любом месте, все коды после него должны игнорироваться, точнее прекращаться обработка файла. Не относится к двоичным файлам.
Escape и следующее за ним, же по определению не относится к текстовым, поскольку этот символ как раз и говорит, что последуюшее не является текстом, а является управляющей (двоичной) последовательностью. Хотя при желании можно ввести ограничение, что EOF не может встречаться в середине файла, но лучше так не делать.


 
Anatoly Podgoretsky ©   (2004-08-16 08:54) [27]

КаПиБаРа ©   (16.08.04 08:51) [25]
Зачем? Я конечно точно не знаю его задачи, но явно достаточно сканировать файл до первого непечатного символа, исключая разрешеные управляющие.


 
КаПиБаРа ©   (2004-08-16 12:17) [28]


> Anatoly Podgoretsky ©   (16.08.04 08:54) [27]

Понимаете, Анатолий, некоторым не дает покоя мысль что продукт можно сделать оригинельнее, лучше. Другие же боятся пальцем пошевелить. Первые достигают успеха, вторые же так и остаются на втором плане.


 
panov ©   (2004-08-16 13:35) [29]

Под текстовым файлом в компьютерном деле понимается файл, содержащий только буквы и знаки препинания, как правило, имеющий строчную структуру, где строки отделяются друг от друга специальными кодами (для DOS и Windows это 13 и 10).
Если в файле кроме собственно текста содержатся какие-то указания на то, как он должен выглядеть на печати (шрифты, способ выравнивания абзацев), то это уже не текст. Это документ.


 
panov ©   (2004-08-16 13:36) [30]

т.е. документ, в котором имеется псевдографика, не является текстовым.


 
Anatoly Podgoretsky ©   (2004-08-16 13:42) [31]

panov ©   (16.08.04 13:36) [30]
Символы псевдографики входят в стандартный набор ASCII Extended как печатные и принтера, дисплеи их поддерживают напрямую.
Но это так между делом.

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



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.029 c
14-1092198512
stas_x
2004-08-11 08:28
2004.08.29
Патент на ПО


14-1092042550
Klerk
2004-08-09 13:09
2004.08.29
Покупаю монитор. Как протестировать?


1-1092205940
Никита
2004-08-11 10:32
2004.08.29
Многозадачное приложение


11-1080062398
nester
2004-03-23 20:19
2004.08.29
Как в КОЛ определить существует ли экземпляр объекта?


4-1090223134
DmitryMN
2004-07-19 11:45
2004.08.29
Поиск директории Program Files