Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2009, 17:51   #1
_Денис
Пользователь
 
Аватар для _Денис
 
Регистрация: 12.11.2009
Сообщений: 20
По умолчанию С++ Builder - Считать значения из файла

Задача цифровой фильтрации данных
Дан файл data.dat с 2 колонками
Код:
0,001 6,999772003
0,002 6,999088046
0,003 6,997948231
0,004 6,996352731
....
1 колонка Время
2 колонка Значение сигнала в момент времени

Не получается при считывании поулучать float значения

Код:
void GetString(int h, AnsiString *st)
{
  unsigned char buf[256];
  unsigned char *p = buf;
  int n;
  int len = 0;

  do                          // удаление пробелов
     n = FileRead(h,p,1);
  while ((n != 0) && (*p == ' '));

  while ((n != 0) && (*p != ' '))
  {
      if ( *p == '\r')
      {
         n = FileRead(h,p,1);
         break;
      }
      ++len;
      p++;
      n = FileRead(h,p,1);
      *p = '\0';
      if (len != 0)
         st->printf("%s",buf);
  }
}
....
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 h = FileOpen("data.dat",fmOpenRead);
 if (h == -1)
 {
    ShowMessage("File open error");
    return;
 }
 AnsiString st;
 GetString(h,&st);
 Memo1->Lines->Add(st);
 GetString(h,&st);
 Memo1->Lines->Add(st);
}
В окне вывода появляются не те значения, что данны в файле.
Подскажите, что не так? Спасибо.
Я бы изменил мир, но исходников нету

Последний раз редактировалось _Денис; 12.11.2009 в 18:34. Причина: В спешке пропустил местоимение и знаки припинания =)
_Денис вне форума Ответить с цитированием
Старый 13.11.2009, 14:19   #2
_Денис
Пользователь
 
Аватар для _Денис
 
Регистрация: 12.11.2009
Сообщений: 20
По умолчанию Всё просто

Спасибо всем, кто обратил внимание на мою задачу. Решение оказалось как обычно лёгким и неожиданным.Тему можно закрывать.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString st_s;
 AnsiString st_c;
 int ls;
 float x,y;
 h_s = FileOpen("step.dat",fmOpenRead);
 h_c = FileOpen("chart.dat",fmOpenRead);
 do
 {
    ls = GetLine(h_s,&st_s);
    ls = GetLine(h_c,&st_c);
    x = StrToFloat(st_s);
    y = StrToFloat(st_c);
    Chart1->Series[0]->AddXY(x,y);
 } while (ls);
 FileClose(h_s);
 FileClose(h_c);
}
.........
int GetLine(int h,AnsiString *st)
{
    unsigned char buf[20];
    unsigned char *p=buf;
    int n;
    int len=0;
    n = FileRead(h,p,1);
    while ( n != 0 )
    {
        if ( *p == '\r')
        {
           n = FileRead(h,p,1);
           break;
        }
        p++;
        ++len;
        n = FileRead(h,p,1);
    }
    *p = '\0';
    if( len != 0 )
       st->printf("%s",buf);
    return len;
}
Вот. Вдруг понадобиться кому нибудь.
Я бы изменил мир, но исходников нету
_Денис вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как считать значения датчиков температуры мат. платы, ЦПУ, видюхи? _dx Win Api 4 13.06.2009 01:40
считать значения в файле.txt ciaonataha Общие вопросы C/C++ 4 30.03.2009 20:06
Считать одинаковые значения Волк Microsoft Office Excel 10 26.03.2009 11:18
считать елементы файла в массив XfighT Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.01.2008 16:35
Считать определенную строку из файла DimkinStd Работа с сетью в Delphi 4 15.02.2007 22:30