Russian Qt Forum
Ноябрь 25, 2024, 16:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QFile, QString - работа со строками в файле  (Прочитано 4497 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Ноябрь 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);
}
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 30, 2012, 10:49 »

Да как же можно ТАК писать код???
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
_OLEGator_
Гость
« Ответ #2 : Ноябрь 30, 2012, 10:51 »

Наверное ошибка тут:
Код
C++ (Qt)
i <= Buffer.length()
Как ты считаешь?

PS срочно учить плюсы и матчасть!
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #3 : Ноябрь 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;

Все равно ошибка, что нитак, не пон иимаю, ткните носом  пожалуйста!
« Последнее редактирование: Ноябрь 30, 2012, 11:08 от demaker » Записан
Serr500
Гость
« Ответ #4 : Ноябрь 30, 2012, 11:10 »

Код:
i < Buffer.length()
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #5 : Ноябрь 30, 2012, 11:51 »

да это я убрал Шокированный
Записан
mutineer
Гость
« Ответ #6 : Ноябрь 30, 2012, 11:52 »

да это я убрал Шокированный

Хоть в старом варианте, хоть в новом, вместо <= надо ставить <
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #7 : Ноябрь 30, 2012, 12:14 »

Да точно катит Веселый

Спасибо Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 23.