| 
| 
 | Вопрос # 1 404/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Мне предложили такую копирования части строки:
 ...
 но не могу чего-то разобраться... Нужно от начала строки до табуляции (#$$9 или #9) скопировать в одну переменную, дальше от таба до таба во вторую и т.д., затем от таба до конца строки. Заранее спасибо! С уважением, Евгений.
 Приложение:Переключить в обычный режим function GetBetween(first, second, line: string): string;var posF, posS, i: integer; index: boolean;beginst:='';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;
 
 всё отлично работает!!! всем спасибо)))
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |