SecondShoe? написа:
В момента имам книгата на DOC файл и се чудя как да премахна оригиналното форматиране. Проблемите ми са със знаците за пренос (не искам да ходя ред по ред да обединявам пренесените думи) и оригиналната дължина на редовете. Искам да обединя редовете и дължината им да зависи само от размера на прозореца на програмата за четене. С другите работи сам ще се оправя ама за тея двете си нямам идея как става!
Има малки тънкости към които ще те насоча.
По
първия ти проблем неправилния пренос, има два типа грешен пренос: единия е на неправилен пренос в комбинация с карай на абзац (т.е. натиснат ENTER за нов ред). При този вариант трябва да се махнат първо символите за край на абзац за да стане проблем на пренос от втори тип, а той е тире за пренос в дума, намираща се по средата на реда. Този тип грешка се оправя много лесно с правописен речник- той ги локализира и извежда в прозорец за поправка. Аз работя вече с Опън Офиса и ползвам неговата екстра за правопис. Ако работите с MS Office трябва да потърсите друг вариант например FlexWord на Datex.
Втория ти проблем, обединяване на редовете е малко по-сложен за решаване,
поради многообразието от грешки. Трябва да се съобразим, че нов абзац можем да имаме единствено след
'.', ':', '!' и '?' които са край на ред. По-редки са случаите когато имаме край на абзац след затварящи кавички и други символи и литерали. От друга страна край на абзац не може да има след малка, голяма буква, интервал, запетая, точка и запетая и тире освен в редки частни случай. И сега аз постъпвам по следния начин текста го конвертирам в ANSI кодировка и коригирам грешките с редактор за шестнадесетичен код
. Ползвам Notepad++ с които извършвам и конвертирането ако се налага. Той в плъгините си има такъв редактор. Правя следните стъпки:
1. (
Решението за първия ти проблем)Задавам му да търси комбинацията 2d0d0a ('
-' + '
ENTER') и където я намери по текста да я замести с 2d20 ('
-' и интервал). По този начин се изчиства комбинираната грешка тире за пренос + край на абзац, като се оставя само тирето с интервал, което води до показване на грешка от правописната програма в думата, ако тирето е за пренос а не обикновено. Излизате от шестнадесетичния редактор и си правите сейв. По желание може още сега да минете правописната проверка за да ликвидирате грешните преноси, там където тиретата не са за преноси няма да ви даде грешка.
2. Сега искам да запомните че в ANSI кодировката 0d0c(латински букви) отговаря на натиснат ентер или нов абзац за
краткост ще го изписвам Е. Следващите търсения и замествания които правя в шестнадесетичния редактор са 20Е с 20(след интервал не може да има нов абзац следователно оставяме само интервал); 2cЕ с 2c20(запетайка Е, със запетайка интервал); 3bЕ с 3b20(точка и запетая Е, с точка и запетая и интервал). До тук считам че ви стана ясно остават ви още точно 32 проверки за малките букви от българската азбука и трябва да въведете последователно търсене и заместване с e0E; e1E; e2E ... edE; eeE; efE; f0E; f1E ... ffE и ги заместите съответно с e020; e120 и т.н. до края. Подчертавам това са малките букви на кирилица. Главните букви и цифрите не ги визирам- според мен много рядко срещана грешка за да си губим времето с нея. Който може да си напише макрос
, който не може
да работи така, по-добре е от колкото да четеш и препрочиташ няколко пъти целия текст.
Разбира се тази техника не е на 100% успешна, но визираните грешки ги свежда до минимум. По този начин оставяте възможност за край на абзац, единствено ако съвпадне с край на изречението. Няма техника за 100% оформяне на абзаците без прочитане на целия текст, но тази ще реши проблема почти на 95%. Успех
ПП Снощи го писах до късно и уточнявам две неща:
Първо конвертирането на текста е в чист текст ANSI кодировка тъй като е 8 битова и търсенето на комбинациите е по-елементарно.
Второ комбинациите са в шестнадесетичен код в който се използват цифрите от 0 до 9 и буквите от латинската азбука- abcdef. Използваната главна буква Е е комбинацията 0c0d.