Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизОпределение текстовых файлов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.037 c