Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Law_Of_Evi1
10 / 10 / 0
Регистрация: 22.12.2011
Сообщений: 96
1

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

24.01.2012, 12:35. Просмотров 751. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2012, 12:35
Ответы с готовыми решениями:

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

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

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

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

Как переделать программу АО Вк
Всем привет. Помогите переделать программу. программа автоответчик на...

11
Aladriel
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
Law_Of_Evi1
10 / 10 / 0
Регистрация: 22.12.2011
Сообщений: 96
24.01.2012, 14:34  [ТС] 3
К примеру такой текст:
??????а?????????????7а?????????????и???????????а?????999??????????

Мне нужно чтобы функция копировала текст который находится только между последним "а" и "999",
а моя функция будет копировать от первого и вместо нужного результата "?????" выдаст "?????????????7а?????????????и???????????а?????"
0
Aladriel
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
Law_Of_Evi1
10 / 10 / 0
Регистрация: 22.12.2011
Сообщений: 96
24.01.2012, 15:49  [ТС] 5
Delphi
1
    Result:=Reverse(result);
"Undeclared identifier: 'Reverse'"
0
Aladriel
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
Law_Of_Evi1
10 / 10 / 0
Регистрация: 22.12.2011
Сообщений: 96
24.01.2012, 15:58  [ТС] 7
Можно конечно это осуществить через цикл:
В найденном тексте еще раз искал бы заданные параметры и понемногу отчистил лишнюю информацию, но можно процесс сделать проще если выделять нужную часть с конечного значения до начального.
0
Aladriel
25 / 18 / 2
Регистрация: 12.12.2011
Сообщений: 76
24.01.2012, 16:00 8
попробуйте, что выше описано.
0
БогДелфей
422 / 330 / 36
Регистрация: 31.05.2011
Сообщений: 1,156
24.01.2012, 16:03 9
а эт ты в файле ищещь? если инфа статично, то можно открыть файл, сместица на нужный байт и прочитать скока нужно байтов куданить
0
Law_Of_Evi1
10 / 10 / 0
Регистрация: 22.12.2011
Сообщений: 96
24.01.2012, 16:16  [ТС] 10
Цитата Сообщение от БогДелфей Посмотреть сообщение
а эт ты в файле ищещь? если инфа статично, то можно открыть файл, сместица на нужный байт и прочитать скока нужно байтов куданить
Не статична.. В разных документах должен искать одну и ту же информацию..

Добавлено через 9 минут
Цитата Сообщение от Aladriel Посмотреть сообщение
попробуйте, что выше описано.
Сейчас времени нет.. Уходить нужно..(Я на работе)
Когда дома буду-проверю-отпишусь =)
0
БогДелфей
422 / 330 / 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
Law_Of_Evi1
10 / 10 / 0
Регистрация: 22.12.2011
Сообщений: 96
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
25.01.2012, 10:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2012, 10:09

Подскажите как переделать
помогите что бы выводило не по рейтингу, а по группам &quot;Очередь (FIFO) Все...

Как переделать это в тест?
подскажите,помогите пожалуйста,как мне переделать это в тест? нужна регистрация...

Подскажите как переделать код
Здравствуйте. Мог бы кто-нибудь помочь с переводом кода Basic для Delphi. Буду...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru