![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Число? [D6, D7, 2000, XP]
Officeman © (2007-01-25 08:00:00)Как програмно сделать простую проверку?
т.з.
Импортирую данные из файла Excel таблиц 'example.xls'
Два поля: Наименование товара, Цена
При чтении значений поля ЦЕНА.
необходимо проверять через тип значения
Если Число(x)=true Тогда
//Делаем его целым (десятичные 0,5 округляем до 1 )
Иначе пропускаем
пробовал так
STE := StrToIntDef(WorkSheet.Cells[x,2],0);
STR := IntToStr(STE);
но если попадается ТЕКСТ с поле ЦЕНА (например: #ЗНАЧ! или другое)
то цикл прерывается с ОШИБКОЙ 'valid type'.
Darvin (2007-01-25 15:01:00) [1]try
Value := StrToFloat(St);
except
end;
И не забудь снять галочку в настройках дебаггера: Stop on Delphi exceptions, иначе все равно будет вылетать при работе в среде.
Officeman (2007-01-25 12:57:00) [2]Удалено модератором
Officeman (2007-01-25 12:13:00) [3]Удалено модератором
Примечание: Создание пустых сообщений
Плохиш (2007-01-25 11:12:00) [4]
> Естъ такой Чувство Юмор, Йа?
Это не "Чувство Юмор", это один из драйверов, которые ответственны за то, что некто вместо изучения основ начинает методом тыка подставлять разные функции в код в надежде, что всё заработает. Ещё рекомендую проверить драйвер head.drv...
Elen (2007-01-25 11:03:00) [5]Удалено модератором
iXT (2007-01-25 10:55:00) [6]
> И что в нем?
У каждого свое :)
Elen (2007-01-25 10:52:00) [7]
> Смотри драйвер hands.sys
И что в нем?
iXT (2007-01-25 10:50:00) [8]Чудес не бывает. Смотри драйвер hands.sys
Elen (2007-01-25 10:36:00) [9]
> Officeman
Да еще может попробуй :
STE := StrToInt( VarToStrDef(WorkSheet.Cells[x,2],0));
STR := IntToStr(STE);
Elen (2007-01-25 10:34:00) [10]
> так же вылетает с ошибкой при встрече ТЕКСТ в поле ЦЕНА
Попробуй Try...Except... End. Он не должен дать ошибку при запуске проги не из под Делфи. Запусти Экзешник отдельно (см. [7])
Officeman (2007-01-25 10:21:00) [11]2Elen, это всё пробовал. не работает.
пробовал даже так:
STR1:=VarToStr(WorkSheet.Cells[x,2]);
a:=true;
For i:=1 to Length(STR1) do begin
If not ((STR1[i]) in (['0'..'9','.'])) then
begin
a:=false;
end
end;
if a then begin Memo4.Lines.Add(WorkSheet.Cells[x,2]) end;
так же вылетает с ошибкой при встрече ТЕКСТ в поле ЦЕНА
контент ошибки: 'invalid variant type convertion'
какаето мелочь. немогу догнать почему так.
Alx2 (2007-01-25 09:43:00) [12]>Officeman © (25.01.07 09:40)
Может, просто из-под среды выбивает с включенным Stop on Delphi exceptions?
Elen (2007-01-25 09:41:00) [13]
> Officeman
Могу ещеValпосоветовать или действительно как сказал Alx2try...Except
Или еще попробуй так :
STE := StrToIntDef( VarToStr(WorkSheet.Cells[x,2]),0);
STR := IntToStr(STE);
Ибо по-моему Cells имеет тип OleVariant.
Officeman (2007-01-25 09:40:00) [14]2Alx2, так тоже не работает
2iXT, StrToIntDef неужели ни о чем не говорит?
iXT (2007-01-25 09:35:00) [15]Что есть STE?
Alx2 (2007-01-25 09:32:00) [16]>Если Число(x)=true Тогда
Честно говоря, раздражает подобное. А-ля
- Скажите, утверждение "соль есть в вашем магазине" равно истине?
А по вопросу - что если обернуть конвертирование в try ... except?
Officeman (2007-01-25 09:17:00) [17]2Elen,
не работает.
при встрече текста в поле цена. вылетает с ошибкой
Elen (2007-01-25 08:48:00) [18]
> STE := StrToIntDef(WorkSheet.Cells[x,2],0);
Попробуй
if TryStrToInt(WorkSheet.Cells[x,2],ste) then STR := IntToStr(STE);