![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение текстовых файлов [D5, Win2k]
NJoe © (2004-07-13 10:08:00)Мот кто подскажет, как определить попроще, является ли содержание файла текстом, не пробегая весь текст для определения управляющих символов.
NJoe (2004-07-13 14:12:00) [1]Всем спасибо.
sniknik (2004-07-13 14:00:00) [2]> Еще в текстовом файле может быть EOF(1A)
точно, я этот символ спутал (говорил #$90), почемуто так запомнилось, но вот представление его визуальное сразу узнал '→'. ;о)
сорри за невольную дезу.
Anatoly Podgoretsky (2004-07-13 13:20:00) [3]NJoe (13.07.04 12:18) [20]
Для случая ANSI ASCII
Сделай таблицу недопустимых символов. Это коды от 0..31, за вычетом - Bell(7), BacкSpace(8), Tab(9), LF(10), CR(13)
Как только встретится хоть один код из этого набора, считай файл не текстовым. Еще в текстовом файле может быть EOF(1A), но только последним символом файла. Кроме того из этого множества можно будет исключить при необходимости и ряд других символов, например FF(12)
ASMiD (13.07.04 12:19) [21]
Мэтр, помоему это не есть возможно строго определить.
Интересует только его определение, в соответствии с ним и строится алгоритм отбраковки.
sniknik (2004-07-13 12:54:00) [4]> дык про уникод речь и не идет.
как это не идет если ты не дал определения чего именно нужно а спрашиваеш в общем о текстовых файлах?
ограничения понятия ты уже после давать начал.
> По-моему достаточно необычно в бреде или блокноте набирать текст в уникоде :)
ты этого можеш даже не заметить, если откроеш такой файл в блокноте правка его ничем не будет отличатся от того что ты называеш обычным. но вот если потом посмотреть в бинарном представлении...
ASMiD (2004-07-13 12:38:00) [5]Есть идея для русскоязычного текста.
Посчитать сумму первых n-байт и, если она >128 то опять же с высокой долей вероятности это - текстовый файл.
c значением n можно поэкспериментировать.
NJoe (2004-07-13 12:33:00) [6]дык про уникод речь и не идет. По-моему достаточно необычно в бреде или блокноте набирать текст в уникоде :)
sniknik (2004-07-13 12:27:00) [7]> Текстовые файлы, содержащие картинки и команды для принтера, имхо, не обычные текстовые файлы. %)
а те которые сейчас (новые), и содержат строки в юникоде?
создай к примеру udl файл (это текстовый файл с описанием конекта, но записан в юникоде) так там через один символы #0 повторяются! а будет руское название или французкое к примеру то в зависимости от кодировки будет чередоваться другим символом.
тоже необычно? ;о))
ASMiD (2004-07-13 12:19:00) [8]Мэтр, помоему это не есть возможно строго определить.
NJoe (2004-07-13 12:18:00) [9]Файл, набранный в блокноте без зажимания alt с цифирями :)))
енто я так понимаю ОБЫЧНЫЙ (ногами не бить:)
Anatoly Podgoretsky (2004-07-13 12:15:00) [10]NJoe (13.07.04 10:08)
Дай точное определение текстовых файлов
ASMiD (2004-07-13 12:15:00) [11]Ессессно, потому и вероятность.
Но все попроще проверить конец на #13#10 или #13#10#$90 или #$90, а далее все равно не плохо уточнить.
NJoe (2004-07-13 12:12:00) [12]Вообщем так... под ОБЫЧНЫМИ текстовыми файлами, созданными в винде имею в виду те, которые содержат символы #32-#175 (зависит от шрифта) плюс управляющие разметкой текста. Текстовые файлы, содержащие картинки и команды для принтера, имхо, не обычные текстовые файлы. %)
sniknik (2004-07-13 12:07:00) [13]ASMiD (13.07.04 12:03) [15]
раньше завершаюшим текста был #$90, есть шанс нарватся и на это.
ASMiD (2004-07-13 12:03:00) [14]Если файл текстовый, то в самом концестоит с огромной долей вероятности #13#10
sniknik (2004-07-13 12:03:00) [15]кстати если ты не знаеш что такое эскейп последовательность.
это начинающаяся с #27, последовательность служащая для управления (обычно принтера, но вроде еще есть драйвер какойто в досе (ansy (???)) тоже аналоичное принимает)
последовательность может включать любыесимволы, обычно это команды принтера (#1#2#3 тоже есть как и #255). так же можно этими последовательностями менять шрифт, внести свой, передать картинку, и.т.д.
понимаеш что это значит? картинка в тексте, какие там символы будут?
а так как ты рассматриваеш обший случай, а не конкретно выделяеш файлы которые могут быть у тебя и их признаки, то, огорчу тебя, задача не имеет 100% верного решения. с таким алгоритмом ты можеш определить только с вероятным процентом. (довольно большим впрочем)
NJoe (2004-07-13 11:59:00) [16]а как часто в текстовиках используется #17 или #6?
◄ ♠
sniknik (2004-07-13 11:52:00) [17]> ясен перец, что проверять недопустимые для текстовиков символы.
так они вседоступны для текстовиков. придумай чтонибудь другое.
NJoe (2004-07-13 11:40:00) [18]:)))
ясен перец, что проверять недопустимые для текстовиков символы. А начало не подходит из-за свойств некоторых юзаемых бинарников. Вообщем фсем спасибо...
han_malign (2004-07-13 11:30:00) [19]> Видимо придется проверять по рандомному куску
- а чем тебя начало не устраивает?
Проверять надо не по "именно фсякие табы, ретурны и иже с ними", а как раз наборот - наличие запрещенных(непечатаемых) символов(достаточного относительного количества, оценку придется самому искать) означает что файл не текстовый
NJoe (2004-07-13 11:09:00) [20]ясен... текстовый файл не обязательно имеет расширение txt. Бинарники создаются не мной, сигнатуры нет или слишком много вариантов. Под управляющими я имел ввиду именно фсякие табы, ретурны и иже с ними.
Видимо придется проверять по рандомному куску ...