Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Открытие документа *.DOC |
Автор: sigizmynd 13.8.2010, 15:31 |
Здравствуйте. Вопрос такой. Язык С и С++ прекрасно работают с текстом в формате *.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 13.8.2010, 15:40 |
sigizmynd, в доке хранится не столько текста, сколько информации о его разметке. См http://directory.fsf.org/project/catdoc/. |
Автор: xvr 13.8.2010, 18:13 |
Формат doc файла есть на сайте MS, но разбирать его - занятие не для слабонервных ![]() |
Автор: sigizmynd 18.8.2010, 15:20 |
нашел способ сделать это гораздо проще, без каких-либо заморочек. есть такая замечательная команда, называется 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 18.8.2010, 15:21 |
не верю. |
Автор: sigizmynd 20.8.2010, 11:09 |
мда, сор, затупился я немножко. проблема так и не решилась. то что писалось выше, оно действительно работает, но только когда *.doc файл находится в нормальной кодировке. тогда команда cp работает. а так да, действительно копирование происходит, но текстовый документ не открывается потом. Вообще суть задачи в следующем: Есть *.doc документ, в нем есть некоторый текст, который необходимо заменить на текст, полученный из командной строки. целый день колупался, так формат doc открыть не удалось. Пришлось работать с текстовым документом. Поступил немного проще: написал небольшой скрипт, который заменяет слова в текстовом файле. в результате - все работает, но работает только с текстовым файлом. а мне необходимо, чтобы это был файл в формате doc, чтобы чтение/запись происходило с файлом этого формата. Читал много на эту тему, увидел, что возможно взаимодействие через OLE объекты. Однако, у меня Ubuntu и я вообще без понятия можно ли их каким-то макаром подключить. также прочитал, что возможно такое открытие/чтение/запись через Java. К сожалению, сейчас не смогу проверить, так как не установлена Java-машина. Может кто-нибудь знает, можно ли из-под командной строки открыть doc файл. Или может быть команду, которая могла бы читать/записывать в doc файл. Буду рад помощи. P.S. извините, если что-то вышеизложенное неправильно И та функция перевода русских символов работает адекватно. Приведи пример, когда она сработает неадекватно. Спасибо |
Автор: xvr 20.8.2010, 14:04 | ||||
![]()
Посмотрите на условие в while и во внутренних if'ах - они взаимоисключающие. Не может число меньшее нуля быть больше 192 Еще вариант - поставьте Wine, в нем запустите Word и в нем сделайте вашу замену (можно автоматически через скрипты) |