Как не читать & quot; \ n & quot; при использовании функции QFile :: readAll

У меня есть файл 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 «отдельно)

0

Решение

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(),

4

Другие решения

Вы можете читать строку за строкой и обрабатывать ее сразу после прочтения строки:

 i = 0;
while (!sequence.atEnd()) {
QByteArray line = sequence.readLine();
signedNo[i] = line[i];
i++;
}
2

По вопросам рекламы [email protected]