Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Ноябрь 30, 2012, 10:48



Название: QFile, QString - работа со строками в файле
Отправлено: demaker от Ноябрь 30, 2012, 10:48
Добрый день!!!
Работаю со строками в файле.

Файл конфигурационный формата Comtrade.

1. читаю с файла построчно в буффер.
2. Начинаю разбирать буффер по формату.
3. Записываем по char до запятой
4. Потом записываем полученную строку в структуру
5. Убираем считанную строку из буффера

// StationName
проходит все замечательно

НО

//Device Id
выдает ошибку завершился с кодом -1073741819

Не могу понять из-за чего ???
Помогите!!!

Вот код:
Код:
QFile * pFile; 

  QString Buffer;   Buffer.clear();
  QString BufInit;  BufInit.clear();

  long int i;
  unsigned int n;
  unsigned int Analog = 0, Digital = 0;

  DynamicCfg = new COMTRADE;

  pFile = new QFile;
  QDir::setCurrent("C:/tmp");
  pFile->setFileName(FileName);

  if(pFile->exists())
  {
      if(!pFile->open(QIODevice::ReadOnly | QIODevice::Text)) return false;
      qDebug()<<"file open";

      while(!pFile->atEnd())
      {
        QString line = pFile->readLine();
        Buffer.append(line);
        qDebug()<<"line = "<<line;
      }

  }
  qDebug()<<"Buffer = "<<Buffer;
  pFile->close();

  // StationName
  for (i = 0; i <= Buffer.length(); i++)
  {
    if (Buffer.at(i) == ',')
    {
      //Buffer.at(i) = 0;
      break;
    }
  DynamicCfg->StationName.insert(i, Buffer.at(i));
  }

  Buffer.remove(0,i+1);
  qDebug()<<"DynamicCfg->StationName"<<DynamicCfg->StationName;
  qDebug()<<"Buffer remove"<<Buffer;

  // DeviceId
  for (i = 0; i <= Buffer.length(); i++)
  {
    if (Buffer.at(i) == 0x0A)
    {
      break;
    }
    DynamicCfg->DeviceId.insert(i,Buffer.at(i));
  }
  Buffer.remove(0,i+2);
}


Название: Re: QFile, QString - работа со строками в файле
Отправлено: Пантер от Ноябрь 30, 2012, 10:49
Да как же можно ТАК писать код???


Название: Re: QFile, QString - работа со строками в файле
Отправлено: _OLEGator_ от Ноябрь 30, 2012, 10:51
Наверное ошибка тут:
Код
C++ (Qt)
i <= Buffer.length()
Как ты считаешь?

PS срочно учить плюсы и матчасть!


Название: Re: QFile, QString - работа со строками в файле
Отправлено: demaker от Ноябрь 30, 2012, 11:02
Хорошо, а так
Код:
pos = Buffer.length();
    start = 0;
    // StationName
    for (i = 0; i <= pos-start; i++)
    {
      if (Buffer.at(i) == ',')
      {        
          break;
      }
    DynamicCfg->StationName.insert(i, Buffer.at(i));
    }

// DeviceId
    for (i = 0; i <= pos - start; i++)
    {
      if (Buffer.at(i) == 0x0A)
      {
        break;
      }
      DynamicCfg->DeviceId.insert(i,Buffer.at(i));
    }
    start += i+2;
    Buffer.remove(0,i+2);
  }
    start+=i+1;
    Buffer.remove(0,i+1);
    qDebug()<<"DynamicCfg->StationName"<<DynamicCfg->StationName;
    qDebug()<<"Buffer remove"<<Buffer;

Все равно ошибка, что нитак, не пон иимаю, ткните носом  пожалуйста!


Название: Re: QFile, QString - работа со строками в файле
Отправлено: Serr500 от Ноябрь 30, 2012, 11:10
Код:
i < Buffer.length()


Название: Re: QFile, QString - работа со строками в файле
Отправлено: demaker от Ноябрь 30, 2012, 11:51
да это я убрал :o


Название: Re: QFile, QString - работа со строками в файле
Отправлено: mutineer от Ноябрь 30, 2012, 11:52
да это я убрал :o

Хоть в старом варианте, хоть в новом, вместо <= надо ставить <


Название: Re: QFile, QString - работа со строками в файле
Отправлено: demaker от Ноябрь 30, 2012, 12:14
Да точно катит :D

Спасибо :)