Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Открытие документа *.DOC 
:(
    Опции темы
sigizmynd
Дата 13.8.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.8.2010

Репутация: нет
Всего: нет



Здравствуйте.

Вопрос такой.
Язык С и С++
прекрасно работают с текстом в формате *.txt, но у меня возникла необходимость просмотреть программными средствами файл формата *.doc. 
fd = open("s.doc", O_RDWR);
    if(fd < 0)
    {
        perror("Can't open file");
        exit(EXIT_FAILURE);
    }
    char buff[10];
    ssize_t nread;
    int i;
    nread = read(fd, buff, (sizeof(buff)));
    for(i = 0; i < 10; i++)
    {
        printf("\n%d\n",buff[i]);
    }
но таким образом на экран выводятся очень странные цифры
-48
-49
17
-32
-95
-79
26
-31
0
0

Самое интересное, что в этом самом файле записано одно единственное число 1.
в ASCII кодировке 1 имеет 31 номер
среди первых чисел такого числа и близко нету.
короче, итого, у меня вопрос,существует ли какая-нибудь библиотека/функция (не готовая программа типа doc2txt), которая могла бы разбирать формат doc и с помощью которой можно было бы прочитать данные из этого документа.
Не буду против различных предложений в ASMe поскольку немного его знаю и смогу запрограммировать.
Буду рад за любую информацию

PM MAIL   Вверх
djamshud
Дата 13.8.2010, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



sigizmynd, в доке хранится не столько текста, сколько информации о его разметке.

См catdoc.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
xvr
Дата 13.8.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Формат doc файла есть на сайте MS, но разбирать его - занятие не для слабонервных   smile 

PM MAIL   Вверх
sigizmynd
Дата 18.8.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.8.2010

Репутация: нет
Всего: нет



нашел способ сделать это гораздо проще, без каких-либо заморочек.
есть такая замечательная команда, называется cp
вот что я сделал:
cp file.doc file.txt
и, не поверите, текст стал адекватно восприниматься.
только пришлось для взаимодействия с русским текстом дописать кусочек:
char* rus(char* st)
{
         char* p = st;

        while (*p < 0)
        {
                if (*p >= 192)
                if (*p <= 239)
                        *p -= 64;
                else
                        *p -= 16;
                p++;
        }
         return st;
}
Спасибо, всем удачи
PM MAIL   Вверх
boostcoder
Дата 18.8.2010, 15:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(sigizmynd @  18.8.2010,  15:20 Найти цитируемый пост)
и, не поверите

не верю.
PM WWW   Вверх
xvr
Дата 19.8.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(sigizmynd @  18.8.2010,  15:20 Найти цитируемый пост)
вот что я сделал:
cp file.doc file.txt
и, не поверите, текст стал адекватно восприниматься.
Это сильно, это 5.  smile Вот все бы проблемы так решались  smile 

Цитата(sigizmynd @  18.8.2010,  15:20 Найти цитируемый пост)
только пришлось для взаимодействия с русским текстом дописать кусочек:
Похоже у вас обычный текстовый файл, только в другой кодировке.
PS. 'Кусочек' кстати неправильный


PM MAIL   Вверх
sigizmynd
Дата 20.8.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.8.2010

Репутация: нет
Всего: нет



мда, сор, затупился я немножко.
проблема так и не решилась.
то что писалось выше, оно действительно работает, но только когда *.doc файл находится в нормальной кодировке. тогда команда cp работает. а так да, действительно копирование происходит, но текстовый документ не открывается потом.
Вообще суть задачи в следующем:
Есть *.doc документ, в нем есть некоторый текст, который необходимо заменить на текст, полученный из командной строки.
целый день колупался, так формат doc открыть не удалось.
Пришлось работать с текстовым документом.
Поступил немного проще: написал небольшой скрипт, который заменяет слова в текстовом файле.
в результате - все работает, но работает только с текстовым файлом.
а мне необходимо, чтобы это был файл в формате doc, чтобы чтение/запись происходило с файлом этого формата.
Читал много на эту тему, увидел, что возможно взаимодействие через OLE объекты. Однако, у меня Ubuntu и я вообще без понятия можно ли их каким-то макаром подключить.
также прочитал, что возможно такое открытие/чтение/запись через Java. 
К сожалению, сейчас не смогу проверить, так как не установлена Java-машина.
Может кто-нибудь знает, можно ли из-под командной строки открыть doc файл.
Или может быть команду, которая могла бы читать/записывать в doc файл.
Буду рад помощи.

P.S. извините, если что-то вышеизложенное неправильно И та функция перевода русских символов работает адекватно.
Приведи пример, когда она сработает неадекватно.
Спасибо
PM MAIL   Вверх
xvr
Дата 20.8.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(sigizmynd @  20.8.2010,  11:09 Найти цитируемый пост)
а мне необходимо, чтобы это был файл в формате doc, чтобы чтение/запись происходило с файлом этого формата.
Читал много на эту тему, увидел, что возможно взаимодействие через OLE объекты.
Угу. Судя по уровню ваших вопросов вам самому это не осилить  smile Если есть желание попробовать, то смотрите сюда - http://download.microsoft.com/download/2/4...tsProtocols.zip

Цитата(sigizmynd @  20.8.2010,  11:09 Найти цитируемый пост)
И та функция перевода русских символов работает адекватно.
Приведи пример, когда она сработает неадекватно.
Всегда. Если вы привели код как он есть, то ваша функция ничего не делает

Посмотрите на условие в while и во внутренних if'ах - они взаимоисключающие. Не может число меньшее нуля быть больше 192

Еще вариант - поставьте Wine, в нем запустите Word и в нем сделайте вашу замену (можно автоматически через скрипты)


Это сообщение отредактировал(а) xvr - 20.8.2010, 14:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0990 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.