Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2014, 08:37   #1
Alexander_
Пользователь
 
Регистрация: 30.11.2014
Сообщений: 19
Восклицание Програма по замене чисел в Ворде

Всем доброго времени суток. Нужно срочно разработать программу которая ведет поиск натурального числа N в Ворде по некоторым критерием, сравнивают с задаваемым числом М а потом и производят замену.
Критерии поиска числа N:
[N (число сразу без пробела после квадратной скобки);
[ N (число после одного пробела после квадратной скобки);
; N (число через пробел после точки с запятой).
;N (число сразу после точки с запятой).
Далее нужно задать два варианта:
1. Если текущее найденное число N больше введенного числа М, то в число N увеличивается на единицу.
2. Если найденное число N равно введенному числу М, то число N заменяется на русскую букву «Ы»; если найденное число N больше введенного числа M, то число N уменьшается на единицу.

Число N может состоять из нескольких цифр (1, 99, 100)
Возможно у кого-то есть похожий готовый пример?
Язык программирования не важен
Alexander_ вне форума Ответить с цитированием
Старый 30.11.2014, 15:11   #2
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Код:
uses ComObj;

var
WordApp: OleVariant;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    case Key of
      #48..#57: ;
      #8      : ;
    else Key:= #0;
end;
end;

function FindAndReplace(const FindText, ReplaceText:string):boolean;
const wdReplaceAll = 2;
begin
  WordApp.Selection.Find.Text :=FindText;
  WordApp.Selection.Find.Replacement.Text :=ReplaceText;
  FindAndReplace:= WordApp.Selection.Find.Execute(Replace:=wdReplaceAll);
end;

procedure TForm1._pOpros(s: string; var tmp: string);
var
tmp1, tmp2: string;
m, n: integer;
begin
   m:= StrToInt(Edit1.Text);
   while Pos(s, tmp) > 0 do
       begin
       delete(tmp, 1, Pos(s, tmp)+ Length(s)-1);
          if Pos(' ', tmp) > 0 then
          tmp1:= Trim(Copy(tmp, 1, Pos(' ', tmp)))
          else
          tmp1:= Trim(Copy(tmp, 1, 255));
            n:= StrToInt(tmp1);
            if m = n then tmp2:= 'Ы' else
                begin
                if m > n then inc(n);
                if m < n then dec(n);
                tmp2:= IntToStr(n);
                end;
       FindAndReplace(s+tmp1, s+tmp2);
       end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
tmpString: TStringList;
i: integer;
tmp: string;
begin
   if Length(Edit1.Text) = 0 then exit;
   WordApp:= CreateOleObject('Word.Application');
   WordApp.documents.Open('c:\Word.docx');
   Wordapp.Visible:=false;
   //****************************//
   tmpString       := TStringList.Create;
   tmpString.Text  := WordApp.ActiveDocument.Range.Text;
   for i:= 0 to tmpString.Count - 1 do
       begin
       tmp:= tmpString.Strings[i];
       _pOpros('[ ', tmp);
       _pOpros('[',  tmp);
       _pOpros('; ', tmp);
       _pOpros(';',  tmp);
       end;
   //****************************//
   WordApp.ActiveDocument.SaveAs('c:\Word_tmp.docx');
   WordApp.Quit;
   tmpString.Free;
end;
end.

Последний раз редактировалось Iron Monk; 30.11.2014 в 15:27. Причина: Забыл про 'Ы' )))
Iron Monk вне форума Ответить с цитированием
Старый 30.11.2014, 22:12   #3
Alexander_
Пользователь
 
Регистрация: 30.11.2014
Сообщений: 19
Хорошо

Спасибо за код! Но у меня есть пару вопросов:
В какой версии делфи вы это писали?
И если не сложно, можете создать рабочий исходник? А то у меня при подстановке кода возникает множество фейлов:
Undeclared identifier: '_pOpros'
There is no overloaded version of 'Pos' that can be called with these arguments
Implicit string cast with potential data loss from 'string' to 'ShortString'

ну и т.д.
Alexander_ вне форума Ответить с цитированием
Старый 30.11.2014, 22:29   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Написано в Delphi 7.
Вложения
Тип файла: rar Word_Find_And_Replace.rar (1.6 Кб, 8 просмотров)
Iron Monk вне форума Ответить с цитированием
Старый 30.11.2014, 23:52   #5
Alexander_
Пользователь
 
Регистрация: 30.11.2014
Сообщений: 19
По умолчанию

Спасибо, код рабочий, но при встрече чисел после которых стоит знак , или ; программа вылетает.
Пример: [4 , c.76-99; 61, c.45-76]. (Тут нужно изменить числа 4 и 61)
Ошибка: '61,' is not valid integer value.
Если не сложно, опубликуйте ту часть кода которую нужно изменить (у самого на это уйдет уйма времени)

Если даже в примере "обрамить" все искомые числа пробелами, все равно выбивает ошибку
В общем полный пример файла для редактирования здесь:
Вложения
Тип файла: doc Документ_Microsoft_Word.doc (31.5 Кб, 10 просмотров)

Последний раз редактировалось Stilet; 01.12.2014 в 08:00.
Alexander_ вне форума Ответить с цитированием
Старый 01.12.2014, 08:04   #6
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Alexander_ Посмотреть сообщение
Спасибо, код рабочий, но при встрече чисел после которых стоит знак , или ; программа вылетает.
Пример: [4 , c.76-99; 61, c.45-76]. (Тут нужно изменить числа 4 и 61)
Ошибка: '61,' is not valid integer value.
Если не сложно, опубликуйте ту часть кода которую нужно изменить (у самого на это уйдет уйма времени)

Если даже в примере "обрамить" все искомые числа пробелами, все равно выбивает ошибку
В общем полный пример файла для редактирования здесь:
Нужно было сразу приложить пример строк. Придется переписывать алгоритм разбора.
Iron Monk вне форума Ответить с цитированием
Старый 01.12.2014, 20:55   #7
Alexander_
Пользователь
 
Регистрация: 30.11.2014
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
Придется переписывать алгоритм разбора.
А это сильно муторно? Просто очень нужна рабочая прога.
Alexander_ вне форума Ответить с цитированием
Старый 01.12.2014, 21:01   #8
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

А просто времени в рабочее время нет совсем...
А Вы сами языками владеете? Могу подталкивать к решению.
Iron Monk вне форума Ответить с цитированием
Старый 01.12.2014, 21:08   #9
Alexander_
Пользователь
 
Регистрация: 30.11.2014
Сообщений: 19
По умолчанию

Слабо, два месяца назад только увидел делфи в глаза. Ну делать нечего, нужно пробовать
Alexander_ вне форума Ответить с цитированием
Старый 01.12.2014, 21:15   #10
Alexander_
Пользователь
 
Регистрация: 30.11.2014
Сообщений: 19
По умолчанию

В этом коде понимаю от силы только половину, но предполагаю что происходит ошибка когда в переменную tmp1 залезают не числовые символы и соответственно операция n:= StrToInt(tmp1); дает сбой (но возможно я неправ)
Alexander_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача о замене оборудования kirusha26 Помощь студентам 0 05.12.2010 17:09
Вопрос по замене строк agent007 Общие вопросы C/C++ 0 07.07.2010 17:59
Програма для нахождения НОД трех чисел Draips Помощь студентам 3 26.04.2010 22:04
Програма для нахождения НОК трех чисел Draips Помощь студентам 5 26.04.2010 20:38
Задача по замене строк motorway PHP 3 06.07.2009 23:58