WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Как скачать текст из *.doc или *.rtf файла

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Как скачать текст из *.doc или *.rtf файла
alpeugene опубликован 06-02-2002 00:16 MSK   Click Here to See the Profile for alpeugene   Click Here to Email alpeugene  
Задача в следующем:

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

Если использовать CFile::Read или СStdioFile::ReadString,то в случае word-овского документа получается нечто не читаемое,а в случае *.rtf - текст с символами форматирования

.....Вообще то есть как минимум 2 варианта решения:

1)Использовать Word как сервер автоматизации посредством IDispatch
2)Открыть в скрытом виде Wordpad,скачать текст,закрыть Wordpad

Оба способа несколько корявы(Word глючит вообще и как сервер автоматизации в частности,Wordpad не удается полностью скрыть,к тому же это еще один процесс)

Может кто знает способы лучше и радикальнее ? Помогитеееее!!!!

Muran опубликован 06-02-2002 12:23 MSK     Click Here to See the Profile for Muran  Click Here to Email Muran     
В доке там есть кусок в файле, где идет вець текст на странице. Идет без форматирования,
то, что тебе надо, как я понял. Надо просто найли офсет и скачать.

А в ртф там ведь все форматирование заключено в
<>, тас что читаешь все подряд кроме этих
кусков между <> включая сами <>

Muran опубликован 06-02-2002 12:27 MSK     Click Here to See the Profile for Muran  Click Here to Email Muran     
Сорри, не <> а {}
Главное не запутаться во вложенных.
SUnteXx опубликован 06-02-2002 12:59 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
/****************************************************************************
*
* FUNCTION: OpenTheFile(HWND, int, char *)
*
* PURPOSE: Opens the given text or rtf file.
*
****************************************************************************/
BOOL OpenTheFile( HWND hWndRichEdit, int iAttrib, char *lpszFileName )
{
HFILE hFile;
OFSTRUCT of;
EDITSTREAM eStream;

if (hFile = OpenFile(lpszFileName, &of, OF_READ))
{
// dwCookie is an app-defined value that holds
// the handle to the file.
eStream.dwCookie = hFile;
eStream.pfnCallback = EditStreamCallback;
eStream.dwError = 0;
SendMessage(hWndRichEdit, EM_STREAMIN, (WPARAM)iAttrib,
(LPARAM)&eStream);

// Reset the dirty bit.
SendMessage (hWndRichEdit, EM_SETMODIFY, (WPARAM)TRUE, 0L);

CloseHandle((HANDLE)hFile);
return TRUE;
}
return FALSE;
}

/****************************************************************************
*
* FUNCTION: EditStreamCallback(DWORD, LPBYTE, LONG, LONG FAR *)
*
* PURPOSE: Callback that reads int the stream.
*
****************************************************************************/
DWORD CALLBACK EditStreamCallback(DWORD dwCookie,
LPBYTE pbBuff, LONG cb, LONG FAR *pcb)
{
ReadFile((HANDLE)dwCookie, pbBuff, cb, pcb, NULL);
if (*pcb < cb )
return 0; // file has been fully read in
else
return ((DWORD)*pcb); // more to read
}

Вот пример для чтения РТФ'а в ричьэдит! Про doc ничего не знаю:(

2Muran:
Знаешь прикол? Иногда символы кодируются в (к примеру) "\'cf\'ee\'f7\'e5\'ec\'f3 \'ea\'ee\'ec\'ef\'fc":(

Ах да, попробуй нади здесь текст (програмно):
"{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset204 Franklin Gothic Medium;}{\f1\fnil\fcharset204{\*\fname Courier New;}Courier New CYR;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\pard\sl360\slmult1\qc\cf1\ul\b\i\f0\fs32 Muran\ulnone\b0\i0\f1\fs20\par
\pard\par
\pard\par
}
"

Тэгов как в HTML'e нету:( Есть некое подобие, но не то:( Так что облом-с!

alpeugene опубликован 06-02-2002 01:05 MSK     Click Here to See the Profile for alpeugene  Click Here to Email alpeugene     
А можно поподробннее начтет word-a и offset-a
Как его найти,если это возможно,используя СFile или CStdioFile(или есть другой способ)?
Вообще-то мне нужно все содержимое *.doc файла в виде только текста (например, если бы Word coхранил его в формате *.txt)
Muran опубликован 06-02-2002 01:08 MSK     Click Here to See the Profile for Muran  Click Here to Email Muran     
2SUnteXx: Вообще тут достаточто просто разобраться, было бы желание.
Там текст выделен четко.
Перед Muran пробел после какойто херни.
А после слэш. Я пробовал разные извраты,
все можно найти, если charcode стандартный.
SUnteXx опубликован 06-02-2002 13:14 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Дык, есесно, во всем можно разобраться! Но все же надо разбираться:( Все можно и найти, но я так написал потому, что ты написал выше, что
"А в ртф там ведь все форматирование заключено в <>, тас что читаешь все подряд кроме этих кусков между <> включая сами <>. Сорри, не <> а {} Главное не запутаться во вложенных."
RTF не HTML, а так ничего сложного вроде бы нет:)

Как я понял нужен только текст! А если будет текст типа "\ul\b\i" (кстати, \ul - underline, \b - bold, \i - italic:)! Как быть тогда?

Все, понял, попробовал создать такой РТФ и понял! В таком случае, если текст идет со слешем, то ставится двойной слеш! ГЫ, как все просто:)

Правда, если брать нормальный РТФ, а не вордовский:(

alpeugene опубликован 14-02-2002 12:09 MSK     Click Here to See the Profile for alpeugene  Click Here to Email alpeugene     
Спасибо за все ответы,все было очень ценно,осталось лишь пару вопросов:
1)Насчет offset-а в Ворде,может подскажете,как его можно програмно вычислить(может он везде начинается определенном номере символа ,например 1451 или может быть есть какой другой способ)
2)Если в Вордовском документе есть русские символы вместо них при чтении файла получается что-то неудобоваримое,может подскажете как данную проблему решить
3)Подобная же проблема наблюдается при чтении RTF в ричэдит по методу SUnteXx - а(персональное спасибо,в остальном работает отлично)-некоторые файлы читает отлично даже с русским текстом(RTF сделанный Вордом),а некоторые(неанглийские)
прочитываются как пустая строка
Помогите,кто знает...!!!!!
rivitna опубликован 14-02-2002 07:35 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
Надеюсь, ты текст по смещению ищешь в стриме WordDocument, а не прямо в doc-файле? :)
rivitna опубликован 16-02-2002 12:05 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
По поводу doc-файлов могу предложить следующее:
1. Считывай стрим WordDocument
2.
Смещение 0x18 - long fcTextFirst (смещение первого символа текста в стриме)
Смещение 0x1C - long fcTextLast (смещение + 1 последнего символа текста в стриме)
3. Далее с помощью смекалки и фукции WideCharToMultiByte получай ANSI-текст
--------------------------------------------
По поводу rtf попробуй сделать преобразование с помощью RichEdit:
Создай невидимое окно RICHEDIT, считывай из rtf, сохраняй как текст

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.