У меня есть файл sequence.dat, который содержит «1» и «-1» в вертикальном представлении (т.е. каждый элемент находится в одной строке). Я пытаюсь прочитать файл следующим образом:
QFile sequence("Sequences.dat");
sequence.open(QIODevice::ReadOnly);
QByteArray data = sequence.readAll();
for(int i=0; i<29; i++){
signedNo[i] = data[i]; // debugging breaking point
}
sequence.close();
однако на пределе отладки QByteArray
«data» содержит «1, -, 1, \ n» вместо «1, -1» …
Есть ли прочесть всю строку сразу, а не каждый байт по отдельности? а также …
если нет, то как сказать «readAll
«функция, чтобы избежать» \ n «(это не оптимальное решение, потому что я хочу также читать» -1 «, а не» — и 1 «отдельно)
QFile::readAll()
возвращает массив байтов, который содержит каждый байт файла как отдельный элемент.
Для вашего случая использования вам нужно прочитать файл построчно.
Документация QFile показывает некоторые подходы, как это сделать, например:
QVector<int> elements;
QFile sequence("Sequences.dat");
if (!sequence.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&sequence);
while (!in.atEnd()) {
QString line = in.readLine();
elements.append(line.toInt());
}
Несмотря на то, что этот образец взят из документации Qt, я бы рекомендовал проверить возвращаемое значение из in.readLine()
который возвращает ноль QString
когда достигнут конец файла, вместо использования atEnd()
,
Вы можете читать строку за строкой и обрабатывать ее сразу после прочтения строки:
i = 0;
while (!sequence.atEnd()) {
QByteArray line = sequence.readLine();
signedNo[i] = line[i];
i++;
}