![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
sigizmynd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 поскольку немного его знаю и смогу запрограммировать. Буду рад за любую информацию |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Формат doc файла есть на сайте MS, но разбирать его - занятие не для слабонервных
![]() |
|||
|
||||
sigizmynd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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; } Спасибо, всем удачи |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
||||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
![]() ![]()
PS. 'Кусочек' кстати неправильный |
||||
|
|||||
sigizmynd |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 13.8.2010 Репутация: нет Всего: нет |
мда, сор, затупился я немножко.
проблема так и не решилась. то что писалось выше, оно действительно работает, но только когда *.doc файл находится в нормальной кодировке. тогда команда cp работает. а так да, действительно копирование происходит, но текстовый документ не открывается потом. Вообще суть задачи в следующем: Есть *.doc документ, в нем есть некоторый текст, который необходимо заменить на текст, полученный из командной строки. целый день колупался, так формат doc открыть не удалось. Пришлось работать с текстовым документом. Поступил немного проще: написал небольшой скрипт, который заменяет слова в текстовом файле. в результате - все работает, но работает только с текстовым файлом. а мне необходимо, чтобы это был файл в формате doc, чтобы чтение/запись происходило с файлом этого формата. Читал много на эту тему, увидел, что возможно взаимодействие через OLE объекты. Однако, у меня Ubuntu и я вообще без понятия можно ли их каким-то макаром подключить. также прочитал, что возможно такое открытие/чтение/запись через Java. К сожалению, сейчас не смогу проверить, так как не установлена Java-машина. Может кто-нибудь знает, можно ли из-под командной строки открыть doc файл. Или может быть команду, которая могла бы читать/записывать в doc файл. Буду рад помощи. P.S. извините, если что-то вышеизложенное неправильно И та функция перевода русских символов работает адекватно. Приведи пример, когда она сработает неадекватно. Спасибо |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Угу. Судя по уровню ваших вопросов вам самому это не осилить ![]()
Посмотрите на условие в while и во внутренних if'ах - они взаимоисключающие. Не может число меньшее нуля быть больше 192 Еще вариант - поставьте Wine, в нем запустите Word и в нем сделайте вашу замену (можно автоматически через скрипты) Это сообщение отредактировал(а) xvr - 20.8.2010, 14:06 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |