|
Вопрос # 1 404/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Мне предложили такую копирования части строки:
...
но не могу чего-то разобраться... Нужно от начала строки до табуляции (#$$9 или #9) скопировать в одну переменную, дальше от таба до таба во вторую и т.д., затем от таба до конца строки. Заранее спасибо! С уважением, Евгений.
Приложение: Переключить в обычный режим- function GetBetween(first, second, line: string): string;
- var posF, posS, i: integer; index: boolean;
- begin
- st:='';
- posF:=pos(first,line)+length(first);
- posS:=pos(second,line);
- index:=true;
- i:=1;
- while (i<=length(line))and(index) do begin
- if (i>=posF)and(i<posS) then st:=st+line[i];
- if i=posS then index:=false;
- inc(i);
- end;
- GetBetween:=st;
- end;
 |
Вопрос задал: Hi-tek (статус: 1-ый класс)
Вопрос отправлен: 11 марта 2008, 09:28
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, Hi-tek!
Кажется у TStringList было свойство Delimeters отвечающее за знак/символ разделитель в строке. И тогда все просто получается. Ставите это свойство равное коду табуляции и спомощью методов TStringList добавляете всю вашу строку, и он сам уже их разбиваете на отдельные подстроки согластно знаку разделителя. В результате у вас получиться целый список строк в этом классе. Такой пример тут уже рассматривался, ищите поиском на портале.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 11 марта 2008, 11:52
Оценка за ответ: 3
|
Ответ #2. Отвечает эксперт: Drozdov D.V.
Здравствуйте, Hi-tek!
Моё мнение в данном примере используется деление строки на несколько строк.
Можно заменить и на другое всё зависит от вкуса.
И конечно всё зависит от конкретной ситуации.
А ниже я привёл справочник по работе со строками.(mini)
УДАЧИ!
 |
Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 12 марта 2008, 23:29
Оценка за ответ: 4
Комментарий к оценке: спасибо за краткий справочник :)
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 11 марта 2008, 17:21; участников в обсуждении: 2.
|
Hi-tek (статус: 1-ый класс), 11 марта 2008, 16:01 [#1]:
да, вот нашел:
var sl:TStringList; i: integer; s: string;
begin
s:='...';
sl:=TstringList.create;
try
sl.delimiter := '...';
sl.DelimitedText := '...';
for i:= 0 to sl.count -1 do
if Pos(s, sl[i]) <> 0 then memo1.lines.add(sl[1]);
finally
sl.free;
end;
помогите пожалуйста адаптировать под мою задачу.
|
|
Hi-tek (статус: 1-ый класс), 11 марта 2008, 16:05 [#2]:
понятно, что в DelimitedText прописываем текст (к примеру "one+two+three"), разделителем является "+", нужно скопировать one в первую переменную, two- во вторую и three - в третью.
|
|
Dron (статус: Студент), 11 марта 2008, 16:45 [#3]:
Ну и в чём теперь проблема?
var_a := sl[0];
var_b := sl[1];
var_c := sl[2];
С уважением.
|
|
Hi-tek (статус: 1-ый класс), 11 марта 2008, 17:11 [#4]:
Dron, спасибо за подсказку! Но вот еще загвоздка: если в строке стоит пробел, то в переменную вписывается всё до пробела, но нужно же всё, включая пробел!
|
|
Hi-tek (статус: 1-ый класс), 11 марта 2008, 17:21 [#5]:
мне так посоветовали:
procedure StrBreakApart(const S, Delimeter: string; Parts: TStrings);
var CurPos: integer;
CurStr: string;
begin
Parts.Clear;
Parts.BeginUpdate;
try
CurStr := S;
repeat
CurPos := Pos(Delimeter, CurStr);
if CurPos>0 then
begin
Parts.Add(Copy(CurStr, 1, Pred(CurPos)));
CurStr := Copy(CurStr, CurPos + Length(Delimeter),
Length(CurStr) - CurPos - Length(Delimeter) + 1);
end else Parts.Add(CurStr);
until CurPos = 0;
finally Parts.EndUpdate; end;
end;
Вызов:
var S:TStrings;
begin
S:=TStringList.Create;
StrBreakApart('one+two+three','+',S);
S.Free;
end;
всё отлично работает!!! всем спасибо)))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|