![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как удалить в тексте из 3-х строк первые 2 строки? [D2005, 2000]
azl © (2006-12-01 00:40:00)Доброго времени суток.
Подскажите, пожалуйста, как можно в тексте из 3-х строк (2-я пустая)удалить первую и пустую строки?
Например, такой текст:
Эту строку нужно уалить
А вот эту строку оставить
Принцип удаления понятен. Можно использовать, например, Delete.
Delete('строка', 0, 'А здесь нужно указать, что удалять нужно все до начала 3-й строки');
Как можно определить начало нужной мне строки?
Спасибо.
Anatoly Podgoretsky (2006-12-03 01:07:00) [1]Сообственно и для длинных строк тоже, только не совместимо по типу и надо обращаться через структуру строки. В данный момент это уже документировано.
koha (2006-12-03 01:05:00) [2]> sniknik © (03.12.06 00:46) [37]
> оно и сейчас это означает, но только в одном частном случае - типе короткая строка.
- Исчерпывающе.
sniknik (2006-12-03 00:46:00) [3]> ord(str1[0]) - В паскале turbo7 это означало длину строки
оно и сейчас это означает, но только в одном частном случае - типе короткая строка.
вот так
var
str1: string[20];
begin
str1:='123456';
ord(str1[0]);
Anatoly Podgoretsky (2006-12-03 00:37:00) [4]> azl (02.12.2006 23:40:33) [33]
Где ты такую глупость прочитал, строка (string) никогда с индекса 0 не начиналась.
koha (2006-12-03 00:26:00) [5]str1:='123456';
ord(str1[0]) - В паскале turbo7 это означало длину строки
А Delphi:
str1:='123456';
str2:=str[0]; // так не работает
Ord(str[0]) - и так тоже не работает и что означает не поятно
sniknik (2006-12-03 00:07:00) [6]azl © (02.12.06 23:40) [33]
сожги книгу откуда это копируешь... а если это то, что как говоришь "знаеш"... то забудь все, и учиться, учиться и учиться.
azl (2006-12-02 23:40:00) [7]Anatoly Podgoretsky © c 0.
Строка — это последовательность символов. При использовании в выражениях строка обязательно заключается в апострофы. Количество символов в строке (длина строки) может динамически изменяться от 0 до 255. Определение строкового типа устанавливает максимальное количество символов, которое может содержать строка.
Loginov Dmitry (2006-12-02 21:58:00) [8]> Хотя я уже программирую лет 10
И что это меняет?
Anatoly Podgoretsky (2006-12-02 20:10:00) [9]> Palladin (02.12.2006 16:51:28) [28]
Еще один озабоченый, который считает, что ему все должны.
Anatoly Podgoretsky (2006-12-02 20:09:00) [10]> azl (02.12.2006 16:42:27) [27]
> А с какой цифры все индексы начинаются в Паскале? С 0 или с 1?
Ну и с какой по твоему?
Anatoly Podgoretsky (2006-12-02 20:09:00) [11]> azl (02.12.2006 16:31:26) [26]
> Если говоришь, почему нужно начинать с единицы, а не с нуля напиши почему, приведи пример. А просто говорить, что не правильно - не серьезно.
Не серьезно, чего то требовать, а если не дали, то игнорировать.
Palladin (2006-12-02 16:51:00) [12]
> [27] azl ©
Строки в паскале с испокон веков начинались с 1, а не с 0, о чем и сказано в справке. Однако с 0 начинаются динамические массивы, вновь прибывшиве в Делфи.
P.S. Спесь поубавь, коли опыта не имеешь и к справке не привычен.
azl (2006-12-02 16:42:00) [13]Вопрос ко всем, кто утверждает, что надо начинать с единицы сканировать строку с 1, а не с 0. А с какой цифры все индексы начинаются в Паскале? С 0 или с 1? Вот и ответ на ваш вопрос.
Считаю, что данная тема решена и дальнейшее ее обсуждение не имеет смысла.
Модераторы, закройте, пожалуйста, эту тему ибо дальнейшее обсуждение не касается темы.
azl (2006-12-02 16:31:00) [14]Всем спасибо за советы.
Virgo_Style ©
1. Ну, меня общий случай мало интересует сейчас. Но к сведению принял.
А зачем, если работает.
2. Ну, пусть будет, если проще. Я так и написал, как проще.
3. Зачем что-то исправлять если работает? Если скажешь почему не рабоает (приведи рабочий пример), с удовольствием исправлю.
Loginov Dmitry © Ну, к начинающим можно отнести любого в той или иной сфере программирования. Хотя я уже программирую лет 10, но слушаю с удовольствием. А если люди просто говорят, что плохо, неправильно, без всяких обоснований, я такое не люблю.
Если говоришь, почему нужно начинать с единицы, а не с нуля напиши почему, приведи пример. А просто говорить, что не правильно - не серьезно.
Loginov Dmitry (2006-12-02 12:31:00) [15]И так большинство начинающих с полным отсутствием каких-либо базовых знаний одинаково упрямы.
Совет: слушай все-таки, что говорят профи и не упрямствуй.
Gydvin (2006-12-02 08:13:00) [16]
> Так на какой ляд это нужно в моем случае? (Это на тот случай,
> чтобы приобрести самому "базовые знания")
Угу #13 вырезаем, а #10 некуда не исчезает, он остается в тексте, и тупо его замусоривает.
Virgo_Style (2006-12-01 23:36:00) [17]azl © (01.12.06 20:25) [22]
Нас так учили в институте.
Значит, неправильно учили. В данном случае - не тяжкий, в общем случае - более чем. А разнца - в том, что неправильно.
> И что оно намного проще
Да.
> А ты попробуй подставить вместо #13 - #13#10 будет ли
> работать? Не будет.
Значит, надо исправлять программу, однако.
azl (2006-12-01 20:25:00) [18]ОК, значит объясню суть всего этого. И разберем мои знания.
Зачем мне это нужно и что я хочу?
Я пишу програмку для отправки/приема сообщений по сети. Следовательно, при приеме сообщений приходит сообщение от NET SEND в виде:
Сообщение от ОТПРАВИТЕЛЬ для ПОЛУЧАТЕЛЬ на 01.12.2006 18:45:56
Тест
Проветка
связи
Я хочу, чтобы первая строка отсекалась. Вроде бы сделал (пример, который я привел). Но тут появились еще грабли, текст сообщения может состоять из нескольких строк, а не из одной, поэтому первый приведенный мною код и код предложенный Сергей М. отпадают, как неправильные. При вышеприведенных кодах выдавалась бы только одна строка из 3-х (связи).
Далее следует ответ на 4-й пункт твоего разбора. Цикл с предусловием while я заменил на цикл for
...
var
p: PAnsiChar;
....
....
a := 0;
for i := 1 to Length(string(pstr)) do begin
if (string(pstr)[i] = #13) and (a = 0) then
begin
MainForm.RxRichEdit1.Text := Copy(string(pstr), i + 4, Length(string(pstr)));
a := a + 1;
end;
...
Думаю, что ввод переменной "а" не нужно объяснять.
Отвечу на 1-й пункт. Нас так учили в институте. Честно говоря, разницы не вижу. В чем разница? Дольше? Ну, извините меня, слава богу не на 186 машинах работаем. Думаю, что это не тяжкий грех.
2. Согласен, замечание правильное. Но тоже сразу не пришло на ум. Здесь ведь как, что первое на ум пришло, то и пишешь, а потом уже исправляешь. Хотя убрав Copy, выражение стало не намного меньше. Если подставить вместо переменной string(pstr) - Label1.Caption то получится практически то же самое(Label1.Caption)[i] = #13.
И что оно намного проще чемCopy(Label1.Caption, i,1) = #13?
3. А ты попробуй подставить вместо #13 - #13#10 будет ли работать? Не будет.
Для сведения, #10 - перевод каретки вначало строки. Так на какой ляд это нужно в моем случае? (Это на тот случай, чтобы приобрести самому "базовые знания")
Вот тебе и отсутствие "базовых знаний". А не ошибается только тот, кто не работает.
Джо (2006-12-01 19:12:00) [19]>
>
> [20] azl © (01.12.06 18:46)
> Джо ©, пардон если обидел, не хотел.
> Просто задело слегка:
>
> > а в отсутствии базовых знаний
>
> Все это я знаю, просто не сориентировался сразу.
Ничего предосудительного в отсутствии некоторых, пусть даже "базовых", знаний — нет. Предосудительным может быть только нежелание их воспринять, но это уже как раз из области "ДНК", которой я касаться не намерен.
А отсутствие "базовых знаний" совершенно очевидно. Смотрим [2] azl ©, даже не разбирая алгоритм.
1. Элементы строки нумеруются с 0, а не с еденицы.
2. Доступ к символам строки целесообразней оформлять по индексу, т.е., S[I], а не городить целую функцию Copy (для копирования одногосимвола!).
3. На платформе Windows строки разделяются парой символов #13#10, а не только #13, как в Юникс.
4. Неоправдан цикл while вместо for.
и т.д. и т.п.
azl (2006-12-01 18:46:00) [20]Джо ©, пардон если обидел, не хотел.
Просто задело слегка:
> а в отсутствии базовых знаний
Все это я знаю, просто не сориентировался сразу.