Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Вниз

Коллеги! Как программно   Найти похожие ветки 

 
CPPBuilderDev   (2003-02-04 10:40) [0]

Кто-нибудь "искал" в *.rtf или *.doc файле подстроку программно?
Если да, то не подскажите как сие делается???
Сами понимаете, поиск в объекте автоматизации - дело слишком долгое. А если надо найти документы из целой их кучи по признаку принадлежноси этой самой подстроки - как тут быть - не знаю, не раскапывать же формат файла.???
какие могут быть советы??


 
Palladin   (2003-02-04 11:13) [1]

Если doc не unicode то искать просто...
читаешь файл как бинарник и ищешь в прочитаном определенную последовательность символов (искомая строка).
Если же doc все таки unicode, то придется адаптировать искомую строку в unicode... добавив к каждому байту символа в начале еще один байт (значение 4 помоему для кириллицы, ИМХО), дальше как для не unicode...


 
Anatoly Podgoretsky   (2003-02-04 11:23) [2]

Palladin © (04.02.03 11:13)
Ты уверен, что так просто?
Пример КраснЧернКрасн - это слово раскрашено в соотвествии с названием.


 
Palladin   (2003-02-04 11:30) [3]

Anatoly Podgoretsky ©
Да уверен.
Только что воспроизвел в Word2000. И посмотрел в файле.
Про rtf я ничего не говорил.


 
Palladin   (2003-02-04 11:34) [4]

в rtf будет немного сложнее... при поиске строки придется игнорировать символы форматирования текста... а так в принципе механизм тотже...

да и по моему формат файла открытый...


 
asmith   (2003-02-04 12:50) [5]

В *.doc можно так:

uses ComObj, ActiveX, AxCtrls, SysUtils, Classes;

function FindTextInFile(const FileName, TextToFind: WideString): boolean;
var Root: IStorage;
EnumStat: IEnumStatStg;
Stat: TStatStg;
iStm: IStream;
Stream: TOleStream;
DocTextString: WideString;
begin
Result:=False;

if not FileExists(FileName) then Exit;

// Check to see if it"s a structured storage file
if StgIsStorageFile(PWideChar(FileName)) <> S_OK then Exit;

// Open the file
OleCheck(StgOpenStorage(PWideChar(FileName), nil,
STGM_READ or STGM_SHARE_EXCLUSIVE, nil, 0, Root));

// Enumerate the storage and stream objects contained within this file
OleCheck(Root.EnumElements(0, nil, 0, EnumStat));

// Check all objects in the storage
while EnumStat.Next(1, Stat, nil) = S_OK do

// Is it a stream with Word data
if Stat.pwcsName = "WordDocument" then

// Try to get the stream "WordDocument"
if Succeeded(Root.OpenStream(Stat.pwcsName, nil,
STGM_READ or STGM_SHARE_EXCLUSIVE, 0, iStm)) then
begin
Stream:=TOleStream.Create(iStm);
try
if Stream.Size > 0 then
begin
// Move text data to string variable
SetLength(DocTextString, Stream.Size);
Stream.Position:=0;
Stream.Read(pChar(DocTextString)^, Stream.Size);

// Find a necessary text
Result:=(Pos(TextToFind, DocTextString) > 0);
end;
finally
Stream.Free;
end;
Exit;
end;
end;



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

Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
14-38476
Nikolay M.
2003-01-29 13:59
2003.02.13
Где взять квариру? :(


1-38154
maxim2
2003-02-04 08:55
2003.02.13
Как засунуть ролик Flash в EXE


3-38019
Sirus
2003-01-29 07:29
2003.02.13
Как вместо сообщения об ошибке выдать свое сообщение???


1-38343
Beglec
2003-02-02 12:27
2003.02.13
Что такое TFrame и с чем его едят?


7-38596
#Deus
2002-12-07 17:32
2003.02.13
Можно ли узнать кластер ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский