|
Вопрос # 2 229/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Подскожите что не так борланд не принимает delete(fn,6,1);
Необходимо в строке удалить часть строки от символа '[' до символа ']' к примеру. или подскажите как сделать без delete
Text:=Memo1.Lines.Text;
for i := 1 to Length(Text) do
t:=Pos('[',Text[i]);
if t > 0 then
fn:='Text[i]';
delete(fn,6,1); // не принимает delete хоть убейся
 |
Вопрос задал: Rinat (статус: Посетитель)
Вопрос отправлен: 23 декабря 2008, 22:26
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Anderson N.N
Здравствуйте, Rinat!
Вот вариант с едитом не забывай
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
i,j,y:integer;
begin
s:=edit1.Text;
i:= Pos('[',s);
j:= Pos(']',s)-i;
if (i<>0)and (j<>0)
then Delete(s,i+1,j);
edit2.Text:=s;
end;
Теперь вариант с memo1 Кстати ты не учел что при присваивании содержимого мемо переменной туда попадают и переводы строк ... Тут это учтено Единственное ограничение программа думает что пара символов встречается только один раз ...
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
-
-
- i,j,y:integer;
- begin
- for y:=0 to memo1.Lines.Count-1 do
- s:=s+memo1.Lines[y];
- i:= Pos('[',s);
- j:= Pos(']',s)-i;
- if (i<>0)and (j<>0)
- then Delete(s,i+1,j);
- memo1.Lines.Text:=s;
- end;
 |
Ответ отправил: Anderson N.N (статус: 2-ой класс)
Время отправки: 23 декабря 2008, 23:35
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 9; последнее сообщение — 24 декабря 2008, 17:58; участников в обсуждении: 4.
|
DNK (статус: Студент), 23 декабря 2008, 22:43 [#1]:
Что значит не принимает? Подробней, что написал компилятор? Также теряюсь в догадках, почему в предпоследней строке Text[i] в ковычках.
"Digital Networked Knight"
|
|
Anderson N.N (статус: 2-ой класс), 23 декабря 2008, 23:41 [#2]:
Прошу прощения в приведенном мною выше коде опечатка в строке
Delete(s,i+1,j);
Нужно Дописать j-1 т.е в итоге
Delete(s,i+1,j-1);
|
|
Rinat (статус: Посетитель), 24 декабря 2008, 01:33 [#3]:
Delete ну ни как не принял не знаю почему
помучился и вроде сделал без Delete спасибо
begin
// a:=Edit1.Text;
// b:=Edit1.Text;
for i:=0 to Memo1.Lines.Count-1 do
begin
if checkbox1.Checked then begin
a:=Edit1.Text; showmessage(a+b);
pp:=pos('[',Memo1.Lines[i]);
if pp>0
then begin
Text:=Memo1.Lines[i];
repeat
t:=t+1; b:=Edit1.Text;
rr:=Pos(']',copy(Text,pp,t));
until rr>0
end ;
Str1:=Memo1.Lines[i];
Str4:=AnsiReplaceText(Str1, copy(Text,pp,rr), '');
Memo1.Lines[i]:=Str4;
end;
end ;
end;
|
|
Rinat (статус: Посетитель), 24 декабря 2008, 01:36 [#4]:
делфи 2005 строка где присутствует delete окрашивается в красный цвет при попытке run
|
|
Anderson N.N (статус: 2-ой класс), 24 декабря 2008, 01:55 [#5]:
я бы рад помочь но сам использую только делфи 7
|
|
Вадим К (статус: Академик), 24 декабря 2008, 11:18 [#6]:
Надобно посмотреть, какую ошибку выдаёт делфи. Но скорее всего, Вы подключили какой то юнит, который тоже определяет функцию/процедуру delete. Для этого попробуйте написать System.delete(....) (в скобках Ваши параметры).
Если это не заработает, подумайте, не используете ли вы .NET приложение - Делфи 2005 это позволяет.
Если и это не так, тогда зажмите Ctrl и кликните по названию функции (то есть по delete, название станет как гиперссылка). и смотрите, в какой юнит закинет. Копируйте его название сюда, а также то, что написано у Вас в строке uses в вашем юните, где ошибка (а не открытом).
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 24 декабря 2008, 11:57 [#7]:
to Anderson N.N
Цитата:
var s:AnsiString; // такой тип потому что в мемо может оказаться текст длина
// которого значительно превышает 255 символов
Обычный string тоже нормально работает. И даже б сказал правильнее. Потому что в 2009 делфи с такими фокусами можно долго плакать и думать (там всё юникодное). Я думаю, мало кто тут добавляет директиву компилятора {H-}/{H+} или лезит в настройки компилятора.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Rinat (статус: Посетитель), 24 декабря 2008, 17:54 [#8]:
unit delete;//вот где проблема была Вадим К прав!!!!!!!!!!!!!!!!!!!!!!!!!!!
с меня оценка
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,StrUtils;
|
|
Вадим К (статус: Академик), 24 декабря 2008, 17:58 [#9]:
красиво
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|