Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как считать символы в memo после


Ирина ©   (2002-03-18 11:25:00) 

Здраствуйте уважаемые, не могли бы Вы подсказать как можно считать в переменную все слова и тэги, находящиеся в memo после символа "#". Заранее благодарна.


Kornet   (2002-03-19 07:37:00) [1]

Могу предложить мой вариант реализации:

type TArrStr = array of string;
......
function explode(Separator:Char; Str:string):TArrStr;
var tmp:string;
marray:TArrStr;
size_array, len:integer;
begin
tmp:=Str;
size_array:=1;
while Pos(Separator, tmp) > 0 do
begin
len:=Pos(Separator, tmp);
SetLength(marray,size_array);
marray[size_array-1]:=TrimLeft(TrimRight(copy(tmp,1,len-1)));
tmp:=copy(tmp,len+1,Length(tmp)-len);
inc(Size_array);
end;
SetLength(marray,size_array);
marray[size_array-1]:=TrimLeft(TrimRight(tmp));
Result:=marray;
end;


Anatoly Podgoretsky   (2002-03-18 20:21:00) [2]


while not eof(f) do begin
readln(f,s);
if Pos("#", S) <> 0 then begin
S := Copy(S, Pos("#", S) + 1, Length(S));
memo1.lines.add(s);
Break;
end;
end;
while not eof(f) do
begin
readln(f,s);
memo1.lines.add(s);
end;


Ирина   (2002-03-18 19:10:00) [3]

Господи, сколько же тут тонкостей :( если текст расположен в txt файле таким образом:

привет#пока

то отлично работает вот этот код:
readln(f,s);
i:=Pos("#", S);
if i <> 0 then
S := Copy(S, i + 1, (Length(S) - i));
memo1.lines.add(s);

Однако, если текст расположен вот так(именно мой вариант):

привет
#
пока

то код уже не работает, считываются символы находящиеся и до "#". Большая просьба все-таки помочь разобраться мне с этой проблемой.


Song   (2002-03-18 13:03:00) [4]

2Виктор Щербаков © (18.03.02 12:52)
В принципе Вы правы конечно, но так программисты не поступают. Во всём нужен порядок. Лучше сделать красивей, чем уповать на такие правила, ИМХО конечно.


MBo   (2002-03-18 12:55:00) [5]

вместо memo2.Text:= s; - это каждый раз замена всего
надо memo2.lines.add(s);
copy c излишней длиной работает, хотя и смотрится сомнительно.
бывает полезно.


Виктор Щербаков   (2002-03-18 12:52:00) [6]

Song © (18.03.02 12:48)
function Copy(S; Index, Count: Integer): string;
...
If Count specifies more characters or array elements than are available, only the characters or elements from S[Index] to the end of S are returned.


gek   (2002-03-18 12:49:00) [7]


readln(f,s);
i:=Pos("#", S);
if i <> 0 then
S := Copy(S, i + 1, (Length(S) - i));
memo2.lines.add(s);



Song   (2002-03-18 12:48:00) [8]

2Ирина
1. Исправьте как я уточнил выше.
2. Не пойму как это "если несколько строк после символа #"? Ведь Вы считываете в S всего лишь одну строку.


Song   (2002-03-18 12:44:00) [9]

2Виктор Щербаков © (18.03.02 11:30)
Copy(Memo1.Text, Pos("#", Memo1.Text) + 1, Length(Memo1.Text) -Pos("#", Memo1.Text));


Ирина   (2002-03-18 12:44:00) [10]

Делаю вот так :
var
f: textfile;
s: string;
begin
AssignFile(f,"text.txt");
Reset(f);
while not eof(f) do
begin
readln(f,s);
S := Copy(S, Pos("#", S) + 1, Length(S));
memo2.Text:= s;

В случае если в текстовом файле text.txt несколько строк после символа # он показывает только последний из них, а все предудущие теряет, в чем тут дело?


Виктор Щербаков   (2002-03-18 11:30:00) [11]

Copy(Memo1.Text, Pos("#", Memo1.Text) + 1, Length(Memo1.Text));


Наверх

Титульная страница Поиск, карта сайта Написать письмо