Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.03.2008, 09:33
vigi vigi вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 10
Репутация: 10
По умолчанию Работа со строкой

как реализовать вот такое дело???

text:= 'вован 345 литров молока';

из этой строки надо вырезать и сохранить в другую переменную (например в переменную skolko)только число (число может быть как двухзначным так и до n Знаков????
помогите плиз!!!!!!!!!!!
Ответить с цитированием
  #2  
Старый 24.03.2008, 10:17
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
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  
Старый 24.03.2008, 10:34
vigi vigi вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 10
Репутация: 10
Хорошо

[quote=Yurk@][code]
procedure TForm1.Button1Click(Sender: TObject);
var
text, tm :string;
i : integer;

Офигенно !!! спасибо
Ответить с цитированием
  #4  
Старый 24.03.2008, 10:35
d1gger17 d1gger17 вне форума
Прохожий
 
Регистрация: 23.03.2008
Адрес: Ахтубинск
Сообщения: 13
Репутация: 10
По умолчанию

ммм, можно по другому:
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  
Старый 24.03.2008, 10:38
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

На строке вида:
Цитата:
Вован надоил 345 литров молока, а Колян 350.
приведенный алгоритм срубится
Ответить с цитированием
  #6  
Старый 24.03.2008, 10:44
vigi vigi вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

Ответ Yurk@ идеально подходит но есть еще один нюанс
если переменная text:='вован 350 литров молока 20.03.04' надо чтобы он вырезал только число литража а числа с даты не трогал (и все далее цифры по тексту) .
Или можно чтобы текст после литража удалялся text2:='вован 350';

Это реально????

Последний раз редактировалось vigi, 24.03.2008 в 10:54.
Ответить с цитированием
  #7  
Старый 24.03.2008, 10:57
d1gger17 d1gger17 вне форума
Прохожий
 
Регистрация: 23.03.2008
Адрес: Ахтубинск
Сообщения: 13
Репутация: 10
По умолчанию

Проверь мой вариант
Ответить с цитированием
  #8  
Старый 24.03.2008, 11:01
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Вот как раз алгоритм d1gger17 подойдет! Находит первую комбинацию цифр и останавливается
Ответить с цитированием
  #9  
Старый 24.03.2008, 11:05
vigi vigi вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

а если совсем конкретно то мне надо вот это сделать:
в переменную гружу имя файла ttt:='amur 9694 03-21 20-42-41.rcd' так вот мне из этого текста нужен вес рыбы тоесть 9694( но он может быть разный ) осталное все не важно. Задача: из переменной вырезать вес и сохранить в другую переменную!!
Спасибо!
Ответить с цитированием
  #10  
Старый 24.03.2008, 11:06
vigi vigi вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от d1gger17
Проверь мой вариант

ок ща попробую!!!
Ответить с цитированием
  #11  
Старый 24.03.2008, 11:07
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

алгоритм d1gger17
Ответить с цитированием
  #12  
Старый 24.03.2008, 12:28
vigi vigi вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от d1gger17
Проверь мой вариант

n:=pos('0'..'9','вован 345 молока');
здесь останавливается ошибка, что не так ???
Ответить с цитированием
  #13  
Старый 24.03.2008, 12:41
d1gger17 d1gger17 вне форума
Прохожий
 
Регистрация: 23.03.2008
Адрес: Ахтубинск
Сообщения: 13
Репутация: 10
По умолчанию

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  
Старый 24.03.2008, 14:06
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Возможно, надо сначала выделить подстроку между первыми двумя пробелами, а затем StrToIntDef(substring, defaulterr)
Ответить с цитированием
  #15  
Старый 24.03.2008, 15:25
vigi vigi вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

Блин Хоть убейте но разжуйте ?!!

Вот алгоритм по идеи должен подойти но:
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 если этого числа нет то ошибка!!!

Помогите начинающему разжевать! Спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter