![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как удалить в тексте из 3-х строк первые 2 строки? [D2005, 2000]
azl © (2006-12-01 00:40:00)Доброго времени суток.
Подскажите, пожалуйста, как можно в тексте из 3-х строк (2-я пустая)удалить первую и пустую строки?
Например, такой текст:
Эту строку нужно уалить
А вот эту строку оставить
Принцип удаления понятен. Можно использовать, например, Delete.
Delete('строка', 0, 'А здесь нужно указать, что удалять нужно все до начала 3-й строки');
Как можно определить начало нужной мне строки?
Спасибо.
azl (2006-12-01 18:43:00) [21]Все равно, мне мой вариант нравится больше, т.к. все сделано руками, а не тупо взято уже готовое. Может быть и плохо, но свое.
Спасибо всем.
Джо (2006-12-01 18:42:00) [22]>
>
> [17] azl © (01.12.06 18:39)
> Джо ©, только не надо обвинять, я и сам разобрался.
Где ты увидел какие-то "обвинения"? Я стандартную схему работу с объектами показал, чтобы не было потом вопросов по утечке памяти и прочим прелестям.
azl (2006-12-01 18:39:00) [23]Джо ©, только не надо обвинять, я и сам разобрался.
Джо (2006-12-01 18:38:00) [24]> [14] azl © (01.12.06 18:36)
> Ага, нашел ошибку. Сначала нужно создать TStringList.
Не только создать. Но создать, использовать и уничтожить правильно:) См. схему в [13].
azl (2006-12-01 18:38:00) [25]
> Джо ©
Не увидел ответа. Спасибо.
azl (2006-12-01 18:36:00) [26]Ага, нашел ошибку. Сначала нужно создать TStringList.
StringList := TStringList.Create;
Джо (2006-12-01 18:20:00) [27]> [12] azl © (01.12.06 18:16)
> Выдается сообщение об ошибке Access Violation at Address
> ....
> У меня bds 2006. Что я не так делаю? Надеюсь, что ошибка
> не в ДНК.
Нет, не в ДНК, а в отсутствии базовых знаний. Перед использованием экз. объекта, его нужно создать, т.е:
StringList := TStringList.Create;
try
// тут используем
finally
StringList.Free;
end;
azl (2006-12-01 18:16:00) [28]
> Anatoly Podgoretsky ©
Дело в том, что N, как раз и не известно. N каждый раз будет, в моем случае, разное.
> Сергей М. ©
Попытался использовать вариант, который ты предложил:
procedure TForm1.Button1Click(Sender: TObject);
var
StringList: TStringList;
begin
StringList.Text := Label1.Caption;
Memo1.Text := StringList[2];
end;
Выдается сообщение об ошибке Access Violation at Address ....
У меня bds 2006. Что я не так делаю? Надеюсь, что ошибка не в ДНК.
Сергей М. (2006-12-01 15:44:00) [29]
> Только с использованием StringList.
А чем оное не устраивает тебя ?
Зачем дублировать код ужерреализованного в классе TStringList аналогичного по функциональности алгоритма ?
Anatoly Podgoretsky (2006-12-01 15:42:00) [30]> azl (01.12.2006 10:56:07) [7]
Delete(S, 1, N);
azl (2006-12-01 11:32:00) [31]Сергей М., пример хороший, спасибо. Только с использованием StringList.
А если используется только текстовая переменная и Memo?
Например:
S :='Эту строку нужно уалить'+#13#13+'А вот эту строку оставить';
#13#13 - я вставил для примера, чтобы показать, в каком виде на самом деле переменной присваивается текст.
Эту строку нужно уалить
А вот эту строку оставить
Сергей М. (2006-12-01 11:03:00) [32]
> Буду только рад, если кто-то предложит лучший вариант чем
> этот.
StringList.Text := Label1.Caption;
Memo1.Text := StringList[2];
azl (2006-12-01 10:56:00) [33]Германн, и что здесь страшного? Ну, можно
i := 1, уж в этом точно ничего плохого нет.
Буду только рад, если кто-то предложит лучший вариант чем этот.
Германн (2006-12-01 02:11:00) [34]
> azl © (01.12.06 01:09) [5]
>
> Чем плох? Как можно сделать лучше?
>
И чем от только не плох?
Первое, навскидку. В первой итерации проверяется "нулевой! символ строки!
azl (2006-12-01 01:09:00) [35]Чем плох? Как можно сделать лучше?
Джо (2006-12-01 01:02:00) [36]П.С.
Код в [2] — плох.
Джо (2006-12-01 01:01:00) [37]> Джо, как чем? А что из примера не видно?
Было бы видно, не спрашивал бы, наверное.
azl (2006-12-01 00:59:00) [38]Все, спасибо. Сам допетрал. Вот код, может кому пригодится:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
i := 0;
while (i <> Length(Label1.Caption)) do begin
if Copy(Label1.Caption, i,1) = #13 then
Memo1.Text := Copy(Label1.Caption, i+2, Length(Label1.Caption));
i:=i+1;
end;
end;
Джо, как чем? А что из примера не видно? После 1-й строки нажат 2 раза Enter.
Джо (2006-12-01 00:46:00) [39]Чем разделяются строки?