Главная страница
    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.01 c
1-38359
Saracin
2003-02-03 21:19
2003.02.13
Как рисовать на TStaticText


1-38264
harismatik
2003-02-05 16:27
2003.02.13
Поток в файл


14-38549
JibSkeart
2003-01-22 12:56
2003.02.13
Убить(удалить) программу во время выполнения


1-38327
sagchat
2003-01-31 13:41
2003.02.13
Как при развертывании формы во весь экран, разместить memo


1-38179
Sharik_212
2003-01-30 17:55
2003.02.13
Помогите вставить картинку в RxRichEdit





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