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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2013, 21:20   #1
Craz
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 21
По умолчанию Считывание и обработка данных из текстового файла

Доброго времени суток!)
Я уже раньше просил создавал 2 темы по поводу считывания данных из файла, но никто так и не помог. Сейчас я написал прогу которая считывает данные нормально, но почему-то не может считать некоторые данные, а именно, год. Если убрать абзац с поиском года ошибок не возникает. Не могу понять чём причина. Вот код проги и сама она в архиве!)
Очень прошу, помогите, пожалуйста!!!
Код:
void __fastcall TForm1::Button5Click(TObject *Sender)
{

 int s;
 TStrings * slist =new TStringList;
 if (OpenDialog1->Execute()) slist->LoadFromFile(OpenDialog1->FileName);
 s = slist->Count;

Edit5->Text=s;

  char temp[255];

  int i=1,j=1;

 while (i < s)
 {
//slist->Strings[i];
   
    char *t = new char [sizeof(slist->Strings[i])];
    t = slist->Strings[i].c_str();

    char *sth = strstr(t, "***===="); //ищу "маяк" что на след. строке нужная информация

    if (sth!=NULL)
    {
     i++;
     t = slist->Strings[i].c_str();   // построчно запихиваю в переменную t

     // Для часов
     char *sthn = strstr(t, " ");     // ставлю указатель на начало отсчёта. Пробел стоит потому, что строка начинается с пробела
     char *sthk = strstr(t, ".");     // ставлю указатель на конец искомого символа

     if ((sthn!=NULL)&&(sthk!=NULL))
      {
       unsigned long lh = sthk - sthn;  // считываю искомый символ
       temp[lh] = 0;
       strncpy(temp, sthn, lh);        // копирую в переменную temp искомый символ
       hour[j]=StrToInt(temp);
       StringGrid1->Cells[2][j] = FloatToStr(hour[j]);    // записываю его в таблицу



       // Для минут
       char *fm = sthn + 4;
       char *m = strstr(fm, " ");
       unsigned long lm = m - fm;
       temp[lm] = 0;
       strncpy(temp, fm, lm);
       min[j]=StrToInt(temp);
       StringGrid1->Cells[3][j] = FloatToStr(min[j]);
 
       // Для года
       char *fy = sthn + 6;
       char *y = strstr(fy, "-");
       unsigned long ly = y - fy;
       temp[ly] = 0;
       strncpy(temp, fy, ly);
       year[j]=StrToInt(temp);
       StringGrid1->Cells[6][j] = FloatToStr(year[j]);      //проблема в добавлении этого обзаца

       j++;
     }


    }


    i++;
Вот старые темы:
http://www.programmersforum.ru/showthread.php?t=240773
http://www.programmersforum.ru/showthread.php?t=240790
Смотрите саму прогу (в архиве, так вряд-ли что-то будет понятно). Заранее спасибо!)
Craz вне форума Ответить с цитированием
Старый 25.07.2013, 21:24   #2
Craz
Пользователь
 
Регистрация: 01.10.2009
Сообщений: 21
По умолчанию

Вот сам файл:
Вложения
Тип файла: rar oooooooooooooooooooo.rar (471.1 Кб, 8 просмотров)
Craz вне форума Ответить с цитированием
Старый 25.07.2013, 22:24   #3
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
 year[j]=StrToInt(temp);
StringGrid1->Cells[6][j] = FloatToStr(year[j]);
Почему FloatToStr если там целое число?

Хотя мне кажется ошибка в твоих расчетах длин строк, дебажить пробовал?
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 25.07.2013, 22:50   #4
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
#include "string"
#include "stdio.h"



int main(int argc, char* argv[])
{   
    FILE* fp = NULL;
    fp = fopen("fg_29.03.2012.txt","r");
    char str[1000] = {0,};
    bool next_str = false;
    while(!feof(fp))
    {
       memset(str,0,sizeof(str));
       fgets(str,sizeof(str),fp);
       if(next_str)
       {
           int h,m,dd,mm,yy;
           if(sscanf(str," %d.%d %d-%d-%d",&h,&m,&dd,&mm,&yy))
              printf("Time: %d.%d Date:%d-%d-%d\n",h,m,dd,mm,yy);
           next_str = false;
       }
       char* p = strstr(str," ***=");
       if(!p)
          continue;
       else
           next_str = true;
    }
	return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание и обработка данных из текстового файла Craz Помощь студентам 2 14.07.2013 19:56
считывание данных из текстового файла C++ de511 Общие вопросы C/C++ 1 02.01.2013 20:56
Считывание с текстового файла в с++! vlad_Gutov Общие вопросы C/C++ 6 27.10.2012 13:03
считывание данных из текстового файла Olejik Общие вопросы по Java, Java SE, Kotlin 3 03.10.2009 20:40
считывание с текстового файла ciaonataha Помощь студентам 0 20.04.2009 12:09