Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка is not a valid floating point value, при StrToFloat() из Memo 
V
    Опции темы
IamDreamer
Дата 22.3.2011, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



В Memo1 текст:
Цитата

0,1
0,3
0,25

в Memo2:
Цитата

20
21
21,3

При выполнении кода
Код

procedure TForm1.Button3Click(Sender: TObject);
var Temp, N: Extended;
i: Integer;
U1, U2, I1, I2: Real;
begin
i:=1;
while i<=Memo1.Lines.Count do
  begin
    if (Memo1.Lines.Count-I)=0 then
      begin
        I1:=StrToFloat(Memo1.Lines[i-1]);
        I2:=StrToFloat(Memo1.Lines[i]);
        U1:=StrToFloat(Memo2.Lines[i-1]); // На этой строке
        U2:=StrToFloat(Memo2.Lines[i]);
        Temp:=Abs(1.6*IntPower(10, -19)*Abs(U2-U1)/1.38*IntPower(10, 23)/Ln(I1/I2));
        Memo3.Text:=Memo3.Text+FloatToStr(Temp);
        Memo3.Lines.Add('');
      end
    else
      begin
        I1:=StrToFloat(Memo1.Lines[i]);
        I2:=StrToFloat(Memo1.Lines[i+1]);
        U1:=StrToFloat(Memo2.Lines[i]);
        U2:=StrToFloat(Memo2.Lines[i+1]);
        Temp:=Abs(1.6*IntPower(10, -19)*Abs(U2-U1)/1.38*IntPower(10, 23)/Ln(I1/I2));
        Memo3.Text:=Memo3.Text+FloatToStr(Temp);
        Memo3.Lines.Add('');
        i:=i+2;
      end;
  end;
end;


вылетает ошибка <Project raised exception class EConvertError with message ''' is not a valid floating point value'>. В чём ошибка? 
PM MAIL WWW Jabber   Вверх
northener
Дата 22.3.2011, 19:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(IamDreamer @  22.3.2011,  19:07 Найти цитируемый пост)
В чём ошибка?

Значит там пустая строка.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
IamDreamer
Дата 22.3.2011, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Цитата(northener @  22.3.2011,  22:45 Найти цитируемый пост)
Значит там пустая строка. 

Видимо, напортачил с индексами... Спасибо.
PM MAIL WWW Jabber   Вверх
THandle
Дата 22.3.2011, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



IamDreamer, может на всякий случай еще использовать TryStrToFloat?
PM   Вверх
IamDreamer
Дата 22.3.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



THandle, вообще можно, но. Первоначально в Memo числа заносятся из текстового файла (по условию решаемой задачи). Реализовано вот так:
Код

procedure TForm1.Button2Click(Sender: TObject);
var F: textfile;
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not Eof(F) do
    begin
      Readln(F, t, I, U);   // t, i, U - глобальные переменные, которым нужно присвоить значения из файла
      Memo1.Text:=Memo1.Text+FloatToStr(I);
      Memo1.Lines.Add('');
      Memo2.Text:=Memo2.Text+FloatToStr(U);
      Memo2.Lines.Add('');
    end;
CloseFile(F);
end;

Перед началом процедуры нужно указать путь к файлу с данными. Мне бы лучше сделать проверку на существование файла (если, например, путь к файлу не указали, а сразу попытались считать данные). 
PM MAIL WWW Jabber   Вверх
Frees
Дата 22.3.2011, 21:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(IamDreamer @  22.3.2011,  23:18 Найти цитируемый пост)
Перед началом процедуры нужно указать путь к файлу с данными

Код

FileExists(OpenDialog1.FileName)


и еще  (на всякий случай) в мемо можно сразу грузить файл....
Код

   Memo1.Lines.LoadFromFile(OpenDialog1.FileName);





--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
IamDreamer
Дата 22.3.2011, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Цитата(Frees @  23.3.2011,  00:00 Найти цитируемый пост)
и еще  (на всякий случай) в мемо можно сразу грузить файл....

Спасибо, попробовал. Кода так становится меньше, но как переписать в Memo1 не всё содержимое файла, а первый (или любой другой) столбец?
PM MAIL WWW Jabber   Вверх
superVad
Дата 22.3.2011, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Возможно, в начале работы программы стоит сделать так:
Код

  DecimalSeparator := ',';

А то вдруг разделитель точка.
PM MAIL   Вверх
IamDreamer
Дата 23.3.2011, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Цитата(Frees @  23.3.2011,  00:00 Найти цитируемый пост)
FileExists(OpenDialog1.FileName)

Пишу:
Код

if FileExists(OpenDialog1.FileName)=false then
  begin
    MessageDLG('Не выбран файл!', mtWarning, [mbOk], 0);
    halt;
  end;

На что заменить <halt>, чтобы при ошибке программа возвращалась к этапу выбора файла? Метку создать?

Пробовал запускать OpenDialog.Execute (с последующим Reset()), но при считывании значений из файла вылетала ошибка
user posted image
PM MAIL WWW Jabber   Вверх
superVad
Дата 23.3.2011, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Для начала пиши:
Код

if not FileExists(OpenDialog1.FileName) then

как то оно грамотней.
Ну напиши exit попробуй. А лучше весь код покажи - а то не понятно куда надо возвращаться программе.

Это сообщение отредактировал(а) superVad - 23.3.2011, 18:01
PM MAIL   Вверх
IamDreamer
Дата 23.3.2011, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



В первоначальном варианте так и было smile.
PM MAIL WWW Jabber   Вверх
superVad
Дата 23.3.2011, 18:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



IamDreamer, какой ты быстрый  smile 
Exit попробуй - но возможно я не до конца понял что то.
PM MAIL   Вверх
IamDreamer
Дата 23.3.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



superVad, спасибо! То самое.
PM MAIL WWW Jabber   Вверх
Frees
Дата 23.3.2011, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



у TOpenDialog есть опция ofFileMustExist - позволит открыть только существующий файл.

Добавлено через 1 минуту и 12 секунд
http://www.beluch.ru/progr/100comp/8_2.htm


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
IamDreamer
Дата 23.3.2011, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Сделал так:
Код

while not Eof(F) do
  Try
      Readln(F, t, I, U);
      Memo1.Text:=Memo1.Text+FloatToStr(I);
      Memo1.Lines.Add('');
      Memo2.Text:=Memo2.Text+FloatToStr(U);
      Memo2.Lines.Add('');
  except MessageDLG('Невозможно считать данные... Выберите другой файл', mtWarning, [mbOk], 0); Exit;
    end;

PM MAIL WWW Jabber   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.