|
#1
|
|||
|
|||
Работа со строкой
как реализовать вот такое дело???
text:= 'вован 345 литров молока'; из этой строки надо вырезать и сохранить в другую переменную (например в переменную skolko)только число (число может быть как двухзначным так и до n Знаков???? помогите плиз!!!!!!!!!!! |
#2
|
||||
|
||||
Код:
procedure TForm1.Button1Click(Sender: TObject); var text, tm :string; i : integer; begin text:='вован 345 литров молока'; tm:=''; for i:=1 to Length(text) do case text[i] of '0'..'9' : tm:=tm+text[i]; else end; ShowMessage(tm); end; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
|||
|
|||
[quote=Yurk@][code]
procedure TForm1.Button1Click(Sender: TObject); var text, tm :string; i : integer; Офигенно !!! спасибо |
#4
|
|||
|
|||
ммм, можно по другому:
var n,i:integer; sun:string; begin n:=pos('0'..'9','вован 345 молока'); if n>0 then for i:=n to length('вован 345 молока') do if 'вован 345 молока'[i]<>' ' then sun:=sun+'вован 345 молока'[i] else break; n:=StrToInt{Для делфи или val для паскаля}(sun); end; |
#5
|
||||
|
||||
На строке вида:
Цитата:
|
#6
|
|||
|
|||
Ответ Yurk@ идеально подходит но есть еще один нюанс
если переменная text:='вован 350 литров молока 20.03.04' надо чтобы он вырезал только число литража а числа с даты не трогал (и все далее цифры по тексту) . Или можно чтобы текст после литража удалялся text2:='вован 350'; Это реально???? Последний раз редактировалось vigi, 24.03.2008 в 10:54. |
#7
|
|||
|
|||
Проверь мой вариант
|
#8
|
|||
|
|||
Вот как раз алгоритм d1gger17 подойдет! Находит первую комбинацию цифр и останавливается
|
#9
|
|||
|
|||
а если совсем конкретно то мне надо вот это сделать:
в переменную гружу имя файла ttt:='amur 9694 03-21 20-42-41.rcd' так вот мне из этого текста нужен вес рыбы тоесть 9694( но он может быть разный ) осталное все не важно. Задача: из переменной вырезать вес и сохранить в другую переменную!! Спасибо! |
#10
|
|||
|
|||
Цитата:
ок ща попробую!!! |
#11
|
|||
|
|||
алгоритм d1gger17
|
#12
|
|||
|
|||
Цитата:
n:=pos('0'..'9','вован 345 молока'); здесь останавливается ошибка, что не так ??? |
#13
|
|||
|
|||
procedure GetNum(TextS:string;StartPos:integer);
var i:integer; begin for i:=StartPos to length(TextS) do if TextS[i]<>' ' then sun:=sun+TextS[i] else break; n:=StrToInt{Для делфи или val для паскаля}(sun); end; var i:integer; begin Text:='Текст 452'; for i:=0 to 9 do begin n:=pos(IntToStr(i),Text); if n>0 then if Text[n-1]=' ' or Text[n-1]='' then begin GetNum(Text;n); break; end; //в n будет число. end; Последний раз редактировалось d1gger17, 24.03.2008 в 12:44. |
#14
|
|||
|
|||
Возможно, надо сначала выделить подстроку между первыми двумя пробелами, а затем StrToIntDef(substring, defaulterr)
|
#15
|
|||
|
|||
Блин Хоть убейте но разжуйте ?!!
Вот алгоритм по идеи должен подойти но: procedure TForm1.Button4Click(Sender: TObject); var n,i:integer; sun:string; begin n:=pos('0'..'9','вован 345 молока'); - вот тут ошибка не проходит почемуто '0'..'9' if n>0 then for i:=n to length('вован 345 молока') do if 'вован 345 молока'[i]<>' ' then sun:=sun+'вован 345 молока'[i] else break; n:=StrToInt{Для делфи или val для паскаля}(sun); end; меняю на '3' все идет но режет строку (если оно есть в строке) с этого символа. Например 345 - нормально получиться 435 - обрежет до 35 если этого числа нет то ошибка!!! Помогите начинающему разжевать! Спасибо |