Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1088868473
Baron
2004-07-03 19:27
2004.07.25
Есть здесь кто имел проблемы с законом?


4-1087304170
ddrum
2004-06-15 16:56
2004.07.25
получение инфы о процессе


1-1089350175
Kaginava
2004-07-09 09:16
2004.07.25
таймер в потоке


14-1088591163
Tomkat
2004-06-30 14:26
2004.07.25
Fast Report 3


1-1089290412
Дмитрий 2004
2004-07-08 16:40
2004.07.25
как организовать поиск в диапазоне 2 дат?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский