Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как считать в структуру значение StringGrid

4.8K
08 марта 2004 года
WD-40
16 / / 21.02.2004
Люди вы не могли бы объяснить дураку что не так я хочу считать в структуру значение StringGrid но у меня не чего не выходит в чём дело.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct {
double fakt [10][10];
double plan [10];
}Pers, *Ppers;
Ppers = &Pers;
Ppers->fakt[2][2]=StrToFloat(StringGrid1->Cells[2][2]);
}
519
09 марта 2004 года
VaGon
134 / / 26.03.2003
Цитата:
Originally posted by WD-40
Люди вы не могли бы объяснить дураку что не так я хочу считать в структуру значение StringGrid но у меня не чего не выходит в чём дело.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct {
double fakt [10][10];
double plan [10];
}Pers, *Ppers;
Ppers = &Pers;
Ppers->fakt[2][2]=StrToFloat(StringGrid1->Cells[2][2]);
}

проверил твой код, все отлично считывает... что ты имеешь ввиду под не выходит?

4.8K
09 марта 2004 года
WD-40
16 / / 21.02.2004
Пишет вот что

Project Project1.exe raised exception class EconverError with message is not a valid floating point value Process stopped Use step or Run to continue

Я так понял что он генерирует исключение

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}// вот здесь строка подсвечивается синим цветом
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------

Что не так
5.4K
10 марта 2004 года
SergKO
29 / / 24.02.2004
Цитата:
Originally posted by WD-40
Пишет вот что

Project Project1.exe raised exception class EconverError with message is not a valid floating point value Process stopped Use step or Run to continue

Я так понял что он генерирует исключение

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}// вот здесь строка подсвечивается синим цветом
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------

Что не так



Попробуйте запустить следующее и сразу все пойметеЖ

AnsiString S = "", SS = "0";
float f1 = StrToFloat(SS);
float f2 = StrToFloat(S); // и синяя строка будет там-же

У вас exception, скорее всего, вылетает на пустых ячейках

293
10 марта 2004 года
SEDEGOFF
586 / / 06.10.2002
Ну да - она тебе же пишет EconverError
попробуй так

void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct {
double fakt [10][10];
double plan [10];
}Pers, *Ppers;
Ppers = &Pers;
try
{
Ppers->fakt[2][2]=StrToFloat(StringGrid1->Cells[2]
[2]);
}
catch(...)
{
Ppers->fakt[2][2]= 0;

}
}
5.4K
10 марта 2004 года
SergKO
29 / / 24.02.2004
Цитата:
Originally posted by SEDEGOFF
Ну да - она тебе же пишет EconverError
попробуй так

void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct {
double fakt [10][10];
double plan [10];
}Pers, *Ppers;
Ppers = &Pers;
try
{
Ppers->fakt[2][2]=StrToFloat(StringGrid1->Cells[2]
[2]);
}
catch(...)
{
Ppers->fakt[2][2]= 0;

}
}



Извините, но зачем писать try / catch, если можно что-нибудь вроде следующего:

Ppers->fakt[2][2] = (StringGrid->Cells[2][2].Length()?StrToFloat(StringGrid->Cells[2][2]):0);

293
10 марта 2004 года
SEDEGOFF
586 / / 06.10.2002
Ну вопервых так правильно
А вовторых - как отработаеться ваш код если в ячейке я напишу слово "жопа"
5.4K
10 марта 2004 года
SergKO
29 / / 24.02.2004
Цитата:
Originally posted by SEDEGOFF
Ну вопервых так правильно
А вовторых - как отработаеться ваш код если в ячейке я напишу слово "жопа"


1. Мы, помогая друг-другу, даем не готовое решение, а путь к нему.
2. Как вы думаете, что скажет бухгалтер или иной пользователь, если вместо суммы или процентов там появиться "жопа". Пользователь может решить, что это ваша оценка его деятельности, и побежит с вами разбираться. А если серьезно, то корректность данных в ячейке следует отслеживать при заполнении Grid'a или таблицы-источника, до их визуализации.
3. М.б. я и не прав, но мне не кажется правильным без необходимости строить свою работу на обработках исключений.
4. Вот для того, чтобы отловить просочившуюся "жопу", следует использовать try / catch, т.е. в итоге получим
try
{
Ppers->fakt[2][2] = (StringGrid->Cells[2][2].Length()?StrToFloat(StringGrid->Cells[2][2]):0);
}
catch(...)
{
Ppers->fakt[2][2]= 0;
}

293
10 марта 2004 года
SEDEGOFF
586 / / 06.10.2002
Извеняюсь если как то обидел. Но
Исключения и даны для того что бы не заморачивать себе голову разными проверками. Кроме этого заключение блоков кода в try/catch являеться не просто хорошим стилем программирования, но и обязательным для использования в программах. Кроме того слова "жопа" в ячейке - это утрированный пример. Привожу реальный - бухгалтер вместо точки поставила запятую в дробном числе. Стока не пустая и при этом вылазиет (по ее мнению) какая то матерная надпись. Так во поверь мне что пользователю труднее обяснить что нужно ставить всегда точку, чем заставить программу говорить ему по русски что он не прав. При этом если программа говорит что пользователь не прав на русском языке - это для него свого рода истина.
Поэтому try/catch нужно спользовать всегда и уж ни вкоем случае не заменять проверкой if.
5.4K
10 марта 2004 года
SergKO
29 / / 24.02.2004
Нет, вы меня ни чем не обидели, и значение злополучной "жопы" я прекрасно понял.

1.
Цитата:
Кроме этого заключение блоков кода в try/catch являеться не просто хорошим стилем программирования, но и обязательным для использования в программах.

Трудно возразить, что и отражено в п.4 моего предыдущего сообщения.

2. Ваше

Цитата:
бухгалтер вместо точки поставила запятую в дробном числе


мое

Цитата:
корректность данных в ячейке следует отслеживать при заполнении Grid'a или таблицы-источника

или при их вводе.

3.

Цитата:
мне не кажется правильным без необходимости строить свою работу на обработках исключений

- ключевые слова "без необходимости"

4. Вообще-то, у меня складывается впечатление, что мы с вами, "размахивая кулаками", старательно соглашаемся друг с другом. Все дело в разумности (чустве меры) при использовании того или иного инструмента.

293
10 марта 2004 года
SEDEGOFF
586 / / 06.10.2002
Вообще то так и есть. Но у каждого свой стиль программирования и с вашим я несогласен. Так же как и вы со мной.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог