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

Вниз

Определение текстовых файлов   Найти похожие ветки 

 
NJoe   (2004-07-13 10:08) [0]

Мот кто подскажет, как определить попроще, является ли содержание файла текстом, не пробегая весь текст для определения управляющих символов.


 
Ega23 ©   (2004-07-13 10:10) [1]

Memo1.Lines.LoadFromFile()  - сразу увидишь.


 
NJoe   (2004-07-13 10:28) [2]

мля... ну нафиг мне мемо... тормозит оно жутко, к тому ж енто самый.... хм.. неудачный способ :))


 
SammIk ©   (2004-07-13 10:34) [3]

Поискать в фаиле символы, да по расширению.
А без моиска ты никак 7не определишь


 
NJoe   (2004-07-13 10:41) [4]

дело в том, что файлы должны обрабатываться большие (и бинарники, и текст), следовательно если пробегать весь то будут тормоза. Хе. Можно, конечно, рандомную выборку делать... Статистикой там воспользоваться... :)
Мот есть у кого идеи?


 
Ega23 ©   (2004-07-13 10:41) [5]

мля... ну нафиг мне мемо... тормозит оно жутко, к тому ж енто самый.... хм.. неудачный способ :))

Конечно неудачный. Но у txt файлов, к сожалению, сигнатуры нет, как, например, у bmp. Так что только методом тыка, т.е. перебором.


 
Ega23 ©   (2004-07-13 10:43) [6]

Что могу посоветовать: есди бинарники специфические, и если ты сам же их и формируешь, то введи на них сигнатуру. Тогда сможешь текстовые файлы методом "от противного" отличать.


 
sniknik ©   (2004-07-13 10:54) [7]

> не пробегая весь текст для определения управляющих символов.
в смысле? обычно в тексте нет управляющих конечно (до #32 исключая #10, #13) но ничего не мешает их туда вставить. это не показатель.
так во времена dos вставлял в текстовый файл эскейп последовательности (для принтера, примитивное форматирование печати этого файла), и что он от этого ставал бинарным? нет так и оставался текстовым.

p.s. обычно то что файл текстовый можно понять по разширению (txt), а вы не знали? ;о))


 
han_malign ©   (2004-07-13 10:57) [8]

ну PE файлы(exe,dll) можно отсечь с помощью GetBinaryType, графические, звуковые, архивы по сигнатуре, а дальше проверять по контексту(печатаемые символы(плюс #9(Tab),#10(LF),#12(Page feed),#13(CR)))


 
NJoe   (2004-07-13 11:09) [9]

ясен... текстовый файл не обязательно имеет расширение txt. Бинарники создаются не мной, сигнатуры нет или слишком много вариантов. Под управляющими я имел ввиду именно фсякие табы, ретурны и иже с ними.
Видимо придется проверять по рандомному куску ...


 
han_malign ©   (2004-07-13 11:30) [10]

>Видимо придется проверять по рандомному куску
- а чем тебя начало не устраивает?
Проверять надо не по "именно фсякие табы, ретурны и иже с ними", а как раз наборот - наличие запрещенных(непечатаемых) символов(достаточного относительного количества, оценку придется самому искать) означает что файл не текстовый


 
NJoe   (2004-07-13 11:40) [11]

:)))
ясен перец, что проверять недопустимые для текстовиков символы. А начало не подходит из-за свойств некоторых юзаемых бинарников. Вообщем фсем спасибо...


 
sniknik ©   (2004-07-13 11:52) [12]

> ясен перец, что проверять недопустимые для текстовиков символы.
так они все доступны для текстовиков. придумай чтонибудь другое.


 
NJoe   (2004-07-13 11:59) [13]

а как часто в текстовиках используется #17 или #6?
◄ ♠


 
sniknik ©   (2004-07-13 12:03) [14]

кстати если ты не знаеш что такое эскейп последовательность.
это начинающаяся с #27, последовательность служащая для управления (обычно принтера, но вроде еще есть драйвер какойто в досе (ansy (???)) тоже аналоичное принимает)
последовательность может включать любые символы, обычно это команды принтера (#1#2#3 тоже есть как и #255). так же можно этими последовательностями менять шрифт, внести свой, передать картинку, и.т.д.
понимаеш что это значит? картинка в тексте, какие там символы будут?

а так как ты рассматриваеш обший случай, а не конкретно выделяеш файлы которые могут быть у тебя и их признаки, то, огорчу тебя, задача не имеет 100% верного решения. с таким алгоритмом ты можеш определить только с вероятным процентом. (довольно большим впрочем)


 
ASMiD   (2004-07-13 12:03) [15]

Если файл текстовый, то в самом конце стоит с огромной долей вероятности #13#10


 
sniknik ©   (2004-07-13 12:07) [16]

ASMiD   (13.07.04 12:03) [15]
раньше завершаюшим текста был #$90, есть шанс нарватся и на это.


 
NJoe   (2004-07-13 12:12) [17]

Вообщем так... под ОБЫЧНЫМИ текстовыми файлами, созданными в винде имею в виду те, которые содержат символы #32-#175 (зависит от шрифта) плюс управляющие разметкой текста. Текстовые файлы, содержащие картинки и команды для принтера, имхо, не обычные текстовые файлы. %)


 
ASMiD   (2004-07-13 12:15) [18]

Ессессно, потому и вероятность.
Но все попроще проверить конец на #13#10 или #13#10#$90 или #$90, а далее все равно не плохо уточнить.


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

NJoe   (13.07.04 10:08)  
Дай точное определение текстовых файлов


 
NJoe   (2004-07-13 12:18) [20]

Файл, набранный в блокноте без зажимания alt с цифирями :)))
енто я так понимаю ОБЫЧНЫЙ (ногами не бить:)


 
ASMiD   (2004-07-13 12:19) [21]

Мэтр, помоему это не есть возможно строго определить.


 
sniknik ©   (2004-07-13 12:27) [22]

> Текстовые файлы, содержащие картинки и команды для принтера, имхо, не обычные текстовые файлы. %)
а те которые сейчас (новые), и содержат строки в юникоде?
создай к примеру udl файл (это текстовый файл с описанием конекта, но записан в юникоде) так там через один символы #0 повторяются! а будет руское название или французкое к примеру то в зависимости от кодировки будет чередоваться другим символом.
тоже необычно? ;о))


 
NJoe   (2004-07-13 12:33) [23]

дык про уникод речь и не идет. По-моему достаточно необычно в бреде или блокноте набирать текст в уникоде :)


 
ASMiD   (2004-07-13 12:38) [24]

Есть идея для русскоязычного текста.
Посчитать сумму первых n-байт и, если она >128 то опять же с высокой долей вероятности это - текстовый файл.
c значением n можно поэкспериментировать.


 
sniknik ©   (2004-07-13 12:54) [25]

> дык про уникод речь и не идет.
как это не идет если ты не дал определения чего именно нужно а спрашиваеш в общем о текстовых файлах?
ограничения понятия ты уже после давать начал.

> По-моему достаточно необычно в бреде или блокноте набирать текст в уникоде :)
ты этого можеш даже не заметить, если откроеш такой файл в блокноте правка его ничем не будет отличатся от того что ты называеш обычным. но вот если потом посмотреть в бинарном представлении...


 
Anatoly Podgoretsky ©   (2004-07-13 13:20) [26]

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 14:00) [27]

> Еще в текстовом файле может быть EOF(1A)
точно, я этот символ спутал (говорил #$90), почемуто так запомнилось, но вот представление его визуальное сразу узнал "→". ;о)
сорри за невольную дезу.


 
NJoe   (2004-07-13 14:12) [28]

Всем спасибо.



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

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

Наверх




Память: 0.53 MB
Время: 0.056 c
8-1084266319
Ozone
2004-05-11 13:05
2004.07.25
JPEG + разбиение рисунка


14-1088668148
Красная Майка
2004-07-01 11:49
2004.07.25
Неофициальное MMP завтра для всех желающих!!!


14-1089085236
jb
2004-07-06 07:40
2004.07.25
Чего бы плохого шефу сделать


14-1088941116
Knight
2004-07-04 15:38
2004.07.25
NetMeeting


1-1089794661
VasRog
2004-07-14 12:44
2004.07.25
Прога наподобии Paint