13 / 13 / 1
Регистрация: 22.12.2011
Сообщений: 110
1

Как переделать функцию?

24.01.2012, 12:35. Показов 1045. Ответов 11
Метки нет (Все метки)

Есть такая функция:

Delphi
1
2
3
4
5
6
7
8
9
10
function TForm2.CopyBetween(const AStr, AStart, AEnd: String): String;
begin
Result := AStr;
 
  if(Pos(AStart,Result)<>0)then
    Result := Copy(AStr,Pos(AStart,Result)+Length(AStart),Length(Result));
 
  if(Pos(AEnd,Result)<>0)then
    Result := Copy(Result,1,Pos(AEnd,Result)-1);
end;
первый параметр(AStr) - сама строка из которой надо "выдрать" слово,
второй параметр(AStart) - начальная строка, после которой начнётся копирование
третий параметр(AEnd) - строка до которой производится копирование

Она копирует текст от второго параметра до третьего, а мне нужно сделать чтобы копировала текст от третьего до второго.
Подскажите как ее отредактировать нужно
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2012, 12:35
Ответы с готовыми решениями:

Как переделать функцию в процедуру
Друзья. Нужна помощь, ни как не могу переделать функцию в процедуру. Вот код(функцию написал а с...

Переделать функцию в программе
помогите переделать функцию в программе unit Unit1; interface uses Windows, Messages,...

Переделать функцию, чтобы старшие разряды были справа
Помогите! Как переписать функцию, чтобы старшие разряды были справа function Str2Bin(aStr:...

Очень нужно! на экзамене сижу, нужно функцию переделать в процедуру
функцию переделать в процедуру

11
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
24.01.2012, 12:43 2
Цитата Сообщение от Law_Of_Evi1 Посмотреть сообщение
мне нужно сделать чтобы копировала текст от третьего до второго.
То есть текст будет в обратном порядке?
если так, то
Delphi
1
2
3
4
5
6
7
8
9
10
11
function TForm2.CopyBetween(const AStr, AStart, AEnd: String): String;
begin
Result := AStr;
 
  if(Pos(AStart,Result)<>0)then
    Result := Copy(AStr,Pos(AStart,Result)+Length(AStart),Length(Result));
 
  if(Pos(AEnd,Result)<>0)then
    Result := Copy(Result,1,Pos(AEnd,Result)-1);
    Result:=Reverse(result);
end;
0
13 / 13 / 1
Регистрация: 22.12.2011
Сообщений: 110
24.01.2012, 14:34  [ТС] 3
К примеру такой текст:
??????а?????????????7а?????????????и???????????а?????999???? ??????

Мне нужно чтобы функция копировала текст который находится только между последним "а" и "999",
а моя функция будет копировать от первого и вместо нужного результата "?????" выдаст "?????????????7а?????????????и???????????а?????"
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
24.01.2012, 15:36 4
Pascal
1
2
3
4
5
6
7
8
9
10
11
function TForm2.CopyBetween(const AStr, AStart, AEnd: String): String;
begin
Result := reverse(AStr);//перевернем строку - первый ?????????а???????? станет последним, а последний ???а?? станет первый.
 
  if(Pos(AStart,Result)<>0)then
    Result := Copy(AStr,Pos(AStart,Result)+Length(AStart),Length(Result));
 
  if(Pos(AEnd,Result)<>0)then
    Result := Copy(Result,1,Pos(AEnd,Result)-1);
    Result:=Reverse(result);
end;
Добавлено через 4 минуты
Или если сложнее то так можно найти последнее вхождение


function InvertS(const S: string): string;//Инверсия строки S
var
i, Len: Integer;
begin
Len := Length(S);
SetLength(Result, Len);
for i := 1 to Len do
Result[i] := S[Len - i + 1];
end;


function PosR2L(const FindS, SrcS: string): Integer;
var
ps: Integer;
begin
ps := Pos(InvertS(FindS), InvertS(SrcS));
if ps <> 0 then
Result := Length(SrcS) - Length(FindS) - ps + 2
else
Result := 0;
end;

Пример использования:

p := PosR2L('as', 'fasfffasffffffffasffffff.'); // p:=18;
0
13 / 13 / 1
Регистрация: 22.12.2011
Сообщений: 110
24.01.2012, 15:49  [ТС] 5
Delphi
1
    Result:=Reverse(result);
"Undeclared identifier: 'Reverse'"
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
24.01.2012, 15:57 6
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function InvertS(const S: string): string;//Инверсия строки S
var
i, Len: Integer;
begin
Len := Length(S);
SetLength(Result, Len);
for i := 1 to Len do
Result[i] := S[Len - i + 1];
end;
 
 
function PosR2L(const FindS, SrcS: string): Integer;
var
ps: Integer;
begin
ps := Pos(InvertS(FindS), InvertS(SrcS));
if ps <> 0 then
Result := Length(SrcS) - Length(FindS) - ps + 2
else
Result := 0;
end;
 
function TForm2.CopyBetween(const AStr, AStart, AEnd: String): String;
begin
Result := AStr;
 
  if(PosR2L(AStart,Result)<>0)then
    Result := Copy(AStr,PosR2L(AStart,Result)+Length(AStart),Length(Result));
 
  if(PosR2L(AEnd,Result)<>0)then
    Result := Copy(Result,1,PosR2L(AEnd,Result)-1);
end;
будет брать все с конца
0
13 / 13 / 1
Регистрация: 22.12.2011
Сообщений: 110
24.01.2012, 15:58  [ТС] 7
Можно конечно это осуществить через цикл:
В найденном тексте еще раз искал бы заданные параметры и понемногу отчистил лишнюю информацию, но можно процесс сделать проще если выделять нужную часть с конечного значения до начального.
0
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
24.01.2012, 16:00 8
попробуйте, что выше описано.
0
429 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
24.01.2012, 16:03 9
а эт ты в файле ищещь? если инфа статично, то можно открыть файл, сместица на нужный байт и прочитать скока нужно байтов куданить
0
13 / 13 / 1
Регистрация: 22.12.2011
Сообщений: 110
24.01.2012, 16:16  [ТС] 10
Цитата Сообщение от БогДелфей Посмотреть сообщение
а эт ты в файле ищещь? если инфа статично, то можно открыть файл, сместица на нужный байт и прочитать скока нужно байтов куданить
Не статична.. В разных документах должен искать одну и ту же информацию..

Добавлено через 9 минут
Цитата Сообщение от Aladriel Посмотреть сообщение
попробуйте, что выше описано.
Сейчас времени нет.. Уходить нужно..(Я на работе)
Когда дома буду-проверю-отпишусь =)
0
429 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
24.01.2012, 17:45 11
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button4Click(Sender: TObject);
const
  s: String = '999';
var
  i, q, w, e: Integer;
begin
  for e := 1 to Length(Memo1.Text) do
    begin
      q := PosEx(s, Memo1.Text, w);
        for i := q downto 1 do
          begin
            if Copy(Memo1.Text, i, 1) = '5' then
              begin
                ShowMessage(Copy(Memo1.Text, i + 1, (q - i) - 1));
                w := q + Length(s);
                Break;
              end;
          end;
    end;
end;
0
13 / 13 / 1
Регистрация: 22.12.2011
Сообщений: 110
25.01.2012, 10:09  [ТС] 12
Цитата Сообщение от Aladriel Посмотреть сообщение
попробуйте, что выше описано.
К сожалению не работает.. Лишний текст копирует...
С первой попавшейся значения и до нужного

Добавлено через 53 минуты
У меня похоже ошибка была в написании первой строки на одной из кнопок.
По этому не знаю работают ли ваши варианты..
Я осуществил так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function TForm2.CopyBetween(const AStr, AStart, AEnd: String): String;
begin
Result := AStr;
   while (Pos(AStart,Result)<>0) do
   begin
   Result := AStr;
  if(Pos(AStart,Result)<>0)then
    begin
    Result := Copy(AStr,Pos(AStart,Result)+Length(AStart),Length(Result));
      end;
  if(Pos(AEnd,Result)<>0)then
    Result := Copy(Result,1,Pos(AEnd,Result)-1);
    end;
end;
Добавлено через 1 минуту
Нужный текст копирую в memo и после этого его программно редактирую

Добавлено через 37 минут
Всем спасибо за участие )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2012, 10:09
Помогаю со студенческими работами здесь

Как переделать через функцию?(
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string&gt; /*Составить и проверить функцию,...

Не могу понять как переделать функцию
Всем привет Есть задание: Выкладываю предыдущее задание : function add(a, b) { var r...

Как переделать функцию для корректной работы?
Всем доброе утро! У меня есть код для замени текста: $string = &quot;raptor editor является...

как переделать функцию в классе, чтоб значение передавалось по ссылке
// Point.hpp // #ifndef Point_HPP #define Point_HPP #include &lt;iostream&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru