Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Строки


Автор: montukxd 26.3.2012, 19:36
Доброго времени суток.
Подскажите новичку.
В ini файле есть строка: VXZC$80699453440   VCZX2$27412221952   ZXCV3$53287231488
Что нужно сделать чтоб часть строки выводилась в label от $ до пробела, затем  от 2$ до второго " " и т.д. цифр между символами может быть разное количество. Кстати после символов будут только цифры, думаю это как то меняет дело  smile 
Чтение из ini файла и вывод я примерно понимаю как сделать, но если что то посоветуете буду признателен.

Следующий способ не подходит т.к. неизвестно кол-во цифр:

Код

procedure TForm2.Button5Click(Sender: TObject);
var s,word: string;
begin
  s:=edit1.text;
  word:=Copy(s,1,Pos('2$',s)-2);
  ShowMessage('Свободно: '+word);
end;


 smile 

Автор: montukxd 26.3.2012, 21:33
решил сделать так 

 Нашел позицию(pos) "$", записал в переменную, удалил(delete) все до нее, скопировал(copy) все до пробела и дальше по кругу.

Автор: Чучмек 27.3.2012, 01:46
Код

var
 p,pt,r:pchar;
 s:string;
 m:array of pchar;
 strcount:cardinal;
 i:integer;
label
 _begin,_end;
begin
s:='VXZC$80699453440   VCZX2$27412221952   ZXCV3$53287231488';
getmem(p,(length(s)+1)*sizeof(char));
strcopy(p,pchar(s));
strcount:=0;
pt:=p;
_begin:
 pt:=strpos(pt,'$');
 if pt=nil then goto _end;
 r:=pt+1;
 if strcount>=length(m) then setlength(m,length(m)+256);
 m[strcount]:=r;
 inc(strcount);
 pt:=strpos(r,' ');
 if pt=nil then goto _end;
 pt^:=#0;
 pt:=pt+1;
 goto _begin;
_end:


for i:=0 to strcount-1 do
memo1.Lines.Add(m[i]);


m:=nil;
freemem(p);

end;


Автор: northener 27.3.2012, 02:29
Цитата(montukxd @  26.3.2012,  21:33 Найти цитируемый пост)
Нашел позицию(pos) "$", записал в переменную, удалил(delete) все до нее, скопировал(copy) все до пробела и дальше по кругу. 

В целом правильное решение. Токмо зачем запоминать в переменной позицию(pos) "$", если алгоритм предполагает сразу "удалил(delete) все до нее"?

Автор: northener 27.3.2012, 03:59
Цитата(Чучмек @  27.3.2012,  01:46 Найти цитируемый пост)
Дата 27.3.2012, 01:46

Вы уж пожалуйста определитетесь на какой версии Дельфи вы работаете?  И для какой версии Дельфи вы даёте ответы.

Автор: montukxd 27.3.2012, 04:20
Цитата

В целом правильное решение. Токмо зачем запоминать в переменной позицию(pos) "$", если алгоритм предполагает сразу "удалил(delete) все до нее"?


Верно, спасибо за подсказку, буду экспериментировать))

Автор: Чучмек 27.3.2012, 10:04
Цитата(northener @  27.3.2012,  03:59 Найти цитируемый пост)
И для какой версии Дельфи вы даёте ответы

А что не так? На любой будет работать.
Цитата(northener @  27.3.2012,  03:59 Найти цитируемый пост)
Вы уж пожалуйста определитетесь на какой версии Дельфи вы работаете?

На 7, хотя XE2 тоже стоит. 

Автор: Qu1nt 27.3.2012, 10:13
Код

uses
  RegularExpressions;

Memo1.Lines.AddStrings(TRegEx.Split('VXZC$80699453440   VCZX2$27412221952   ZXCV3$53287231488', '\w+\$'));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)