Модераторы: 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   Вверх
Frees
Дата 23.3.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а если исключение вызовет FloatToStr, формат числа например кривой ?
то MessageDLG(...  введет в заблуждение и скроет реальную ошибку!


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


Опытный
**


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

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



Цитата(Frees @  23.3.2011,  22:17 Найти цитируемый пост)
а если исключение вызовет FloatToStr

Страшно представить smile...

Почему TryStrToFloat есть, а TryFloatToStr нет?
PM MAIL WWW Jabber   Вверх
Frees
Дата 23.3.2011, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(IamDreamer @  23.3.2011,  22:26 Найти цитируемый пост)
Страшно представить ...Почему TryStrToFloat есть, а TryFloatToStr нет?

я FloatToStr и StrToFloat  перепутал...

FloatToStr - врядли вызовет исключение....


Это сообщение отредактировал(а) Frees - 23.3.2011, 19:30


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


Опытный
**


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

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



Обещали файл только с числами. Я их присваиваю переменным, потом вывожу в Memo.
PM MAIL WWW Jabber   Вверх
northener
Дата 24.3.2011, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(IamDreamer @  23.3.2011,  19:05 Найти цитируемый пост)
Сделал так:


Цитата(IamDreamer @  23.3.2011,  19:38 Найти цитируемый пост)
Обещали файл только с числами.


Ну раз обещали, то можно и так. Вот только кого назовут стрелочником, если что-то пойдет не так?
Ну и вдогонку. Read/Readln могут и не вызвать исключение. Если не включена соответствующая опция компилятора. По умолчанию она включена.


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


Опытный
**


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

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



Цитата(northener @  24.3.2011,  04:01 Найти цитируемый пост)
Вот только кого назовут стрелочником, если что-то пойдет не так?

Как-нибудь переживу...
PM MAIL WWW Jabber   Вверх
IamDreamer
Дата 24.3.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Файл оказался несколько иной формы: имеет вид
Цитата

11:17:01    1144    268,42    213    65
11:17:02    1144    268,42    213    65
11:17:03    1144    268,42    213    65
11:17:03    1144    268,42    213    65

Переменной типа TTime можно напрямую из файла командой Readln(filename, T) присвоить значение первого столбца (т.е. чтобы после выполнения Readln(Filename, T) значение T=11:17:01)?

PM MAIL WWW Jabber   Вверх
superVad
Дата 24.3.2011, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я не уверен но возможно надо в FormCreate такое поставить:
Код

  TimeSeparator := ':';
  ShortTimeFormat := 'hh:nn:ss';


И можно будет использовать функцию StrToTime.

ПС Вероятно я ошибся и надо использовать LongTimeFormat вместо ShortTimeFormat.

В общем поэкспериментируй, попробуй как работает такое:
Код

T=StrToTime('11:17:01');


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


Опытный
**


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

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



Цитата(superVad @  24.3.2011,  21:58 Найти цитируемый пост)
И можно будет использовать функцию StrToTime.

То есть всё-таки надо будет сначала считать как строку, потом перевести в TTime?
PM MAIL WWW Jabber   Вверх
superVad
Дата 24.3.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(IamDreamer @  24.3.2011,  18:23 Найти цитируемый пост)
То есть всё-таки надо будет сначала считать как строку, потом перевести в TTime?

А как ты еще из текстового файла хочешь считать?  smile 
PM MAIL   Вверх
IamDreamer
Дата 24.3.2011, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



superVad, числа же сразу считываются. 
PM MAIL WWW Jabber   Вверх
superVad
Дата 24.3.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(IamDreamer @  24.3.2011,  18:54 Найти цитируемый пост)
superVad, числа же сразу считываются. 

Ну попробуй smile, что мешает?
PM MAIL   Вверх
IamDreamer
Дата 24.3.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(superVad @  24.3.2011,  23:13 Найти цитируемый пост)
что мешает? 

Код

Var
t: TTime;
...
 Try
      Readln(F, t);
except MessageDLG('Невозможно считать данные...', mtWarning, [mbOk], 0); Exit;
    end;


Файл F имеет вид, как показано выше.

Выполнение приводит к ошибке 

user posted image

Это сообщение отредактировал(а) IamDreamer - 24.3.2011, 20:18
PM MAIL WWW Jabber   Вверх
Frees
Дата 24.3.2011, 20:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



TTime - это на самом деле Float а в файле у тебя строка, читай строку и StrToTime используй.


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


Опытный
**


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

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



Frees, спасибо. Теперь другая загвоздка: в строковую переменную в результате Readln(filename, stroka) присваивается вся строка, т.е. "11:17:01    1144    268,42    213    65". Как сделать так, чтобы в эту переменную записывалось только время без редактирования файла?
PM MAIL WWW Jabber   Вверх
Frees
Дата 24.3.2011, 20:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



может так, хотя не уверен..
Код

stroka: array [0..7] of char;
Read(filename, stroka) ;






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


Опытный
**


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

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



Или:
Код

Read(filename, stroka) ;
stroka := copy(stroka,1,8);

PM MAIL   Вверх
Frees
Дата 24.3.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(superVad @  25.3.2011,  00:14 Найти цитируемый пост)
Или:


данные после времени тоже надо из строки stroka брать, Read из файла уже следующую строку данных верноет

Это сообщение отредактировал(а) Frees - 24.3.2011, 21:30


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


Опытный
**


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

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



Readln (Filename, Stroka) без ошибок. Если добавить ещё 2 переменные (Readln(Filename, Stroka, A, B)), вылетает та же ошибка. A, B - переменные типа Real.

Это сообщение отредактировал(а) IamDreamer - 24.3.2011, 21:33
PM MAIL WWW Jabber   Вверх
superVad
Дата 24.3.2011, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Frees @  24.3.2011,  20:26 Найти цитируемый пост)
данные после времени тоже надо из строки stroka брать, Read из файла уже следующую строку данных верноет

Ну использовать другую переменную smile или вообще:  
Код

  T := StrToTime(copy(stroka,1,8));

PM MAIL   Вверх
northener
Дата 25.3.2011, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



2 superVad.
Ну не хочет автор "распарсивать" строки данного ему файла. Ему хочется использовать процедуру  Read/Readln!
Мне бы тоже хотелось бы этого, если бы я не знал, что "компилер маджик" всё-таки не волшебная палочка.
smile


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


Опытный
**


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

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



В общем, дело вот в чём. Файл имеет расширение .csv, в блокноте его содержимое выглядит так:
Цитата
11:17:01;1144;268,42;213;65;
11:17:02;1144;268,42;213;65;
11:17:03;1144;268,42;213;65;

Readln() не может считать информацию из-за разделителей ';' (пробовал заменить их на пробелы - всё получилось). Запятые, отделяющие целую часть от дробной, вроде переваривает. 

Нужно либо считать все данные в строку, а затем из неё вытащить числа, либо на этапе чтения из файла заставить читать, несмотря на точки с запятыми. Мне второй вариант кажется менее объёмным, но слабо представляю, как его осуществить... 
PM MAIL WWW Jabber   Вверх
Frees
Дата 25.3.2011, 09:15 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(IamDreamer @  25.3.2011,  11:16 Найти цитируемый пост)
В общем, дело вот в чём. Файл имеет расширение .csv

дак работай с ним как с csv, по средствам TStringList (DelimitedText)


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
superVad
Дата 25.3.2011, 09:51 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как то так:
Код

var
  tsl_file, tsl_str: TStringList;
  i: Integer;
begin
  tsl_file := TStringList.Create;
  tsl_str := TStringList.Create;
  tsl_file.LoadFromFile('путь к файлу');
  tsl_str.Delimiter := ';';
  for i := 0 to tsl_file.Count -1 do
  begin
    tsl_str.Clear;
    tsl_str.DelimitedText := tsl_file[i];
    //тут работаешь с данными
    //в tsl_str[0] будет время и т.д. до tsl_str[4]
  end;
  FreeAndNil(tsl_str);
  FreeAndNil(tsl_file);
end;


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


Опытный
**


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

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



Тут задание снова поменяли... Новый вид файла с входными данными:
Цитата
MAR 25 14:14:28.7203    -42.60639
MAR 25 14:14:29.3747    -42.26153
MAR 25 14:14:30.0292    -42.43396
MAR 25 14:14:30.6860    -42.29026
MAR 25 14:14:31.3436    -42.34774


Как учесть то, что последнее значение отделено несколькими пробелами?
PM MAIL WWW Jabber   Вверх
Frees
Дата 29.3.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(IamDreamer @  29.3.2011,  17:47 Найти цитируемый пост)
 несколькими пробелами?

может это Tab ?

Добавлено через 2 минуты и 59 секунд
пример написанный IamDreamer должен был переварить пробелы


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


Опытный
**


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

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



Попробовал в качестве Delimiter указать ' ' (один пробел) и проверил результат командой 
Код
ShowMessage(tsl_Values[0] + '***' + tsl_Values[1] + '***' + tsl_Values[2] + '***' + tsl_Values[3]);

Результат:
Цитата
MAR***25***14:14:59.4293***-16.33926

Выходит, количество пробелов ему безразлично smile.

Добавлено через 59 секунд
Цитата(Frees @  29.3.2011,  17:54 Найти цитируемый пост)
пример написанный IamDreamer должен был переварить пробелы 

SuperVad. Да, переварил. За что ему ещё раз спасибо! А то я уже выматерил тех, кто мне это задание выдал.
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.

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


 




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


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

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