Как использовать функцию QTextStream :: readLine? - PullRequest
3 голосов
/ 30 марта 2012

Я пытаюсь прочитать значения из текстового файла, используя приведенный ниже код Qt.

int ReadFromFile(QString fileName)
{
   QFile file(fileName);
   if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
      return 1;

   QTextStream in(&file);
   while (!in.atEnd())
   {
      QString line = in.readLine(1); //read one line at a time
      QStringList lstLine = line.split(",");
   }
   file.close();
   return 0;
}

Содержимое текстового файла выглядит следующим образом:

1,0.173648178  
2,0.342020143  
3,0.5  
4,0.64278761  
5,0.766044443  
6,0.866025404  

Однако readLineвсегда возвращает по одному символу за раз, но я собираюсь читать по одной строке за раз и разбивать каждую строку, чтобы получить отдельные значения, разделенные запятыми.

Я что-то здесь упускаю?

Ответы [ 3 ]

5 голосов
/ 30 марта 2012

Да.Вы передаете 1 для параметра maxlen, что означает ограничение длины строки только 1 символом.Попробуйте, ничего не поставляя для maxlen.

1 голос
/ 24 мая 2018

Я знаю, что это может быть старый пост, но похоже, что вы перезаписываете свою переменную lstLine во время каждой итерации.

Этот:

QStringList lstLine = line.split(",");

Измените на

int ReadFromFile(QString fileName)
{
   QStringList lstLine;
   QFile file(fileName);
   if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
      return 1;
   QTextStream in(&file);
   while (!in.atEnd())
   {
      QString line = in.readLine(); //specifying number = # of characters
      lstLine.append( line.split(",") );
   }
   file.close();
   return 0;
}
1 голос
/ 30 марта 2012

удалите ноль из вашего кода и попробуйте ..

   QTextStream in(&file);
   while (!in.atEnd())
   {
      QString line = in.readLine(); //read one line at a time
      QStringList lstLine = line.split(",");
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...