Russian Qt Forum

Qt => Вопросы новичков => Тема начата: TsysarAndrew от Июнь 18, 2014, 02:03



Название: Коррекировка текстового файла [РЕШЕНО]
Отправлено: TsysarAndrew от Июнь 18, 2014, 02:03
Добрый день!
Пытаюсь провести анализ текстовых файлов, одной из задач является привязка полученных данных к номерам строк. Временами попадаются файлы, в которых на конце строки где-то стоит CR LF, а где-то просто CR. При чтении файла в таких ситуациях последовательность CR CR LF читается не как две строки, а как одна. В итоге идет неверная привязка данных к номерам срок в файле. Может это правильно, но, например, notepad++ отображает две строки, поэтому при анализе результатов возникает путаница.

Решил сначала менять в файле CR CR на CR LF CR, а потом делать анализ. Написал следующий код:
Код:
QFile file_(path + filename);
QFile tempFile(path + "temp.bin");

QByteArray f_bytes;

QByteArray wrongBytes;
wrongBytes.append(0x0d);
wrongBytes.append(0x0d);

QByteArray writeBytes;
writeBytes.append(0x0d);
writeBytes.append(0x0a);
writeBytes.append(0x0d);

if(file_.open(QIODevice::ReadOnly))
{
f_bytes = file_.readAll();
f_bytes.replace(wrongBytes, writeBytes);

if(tempFile.open(QIODevice::WriteOnly))
{
tempFile.write(f_bytes);
tempFile.close();
}
}

Таким образом в файл temp.bin не пишутся символы CR, только LF, "строки с неправильным переносом" теряются. Убирал вызов f_bytes.replace, ничего не поменялось.   Далее не знаю куда именно копать, т.к. опыта работы с QT (и С++) не много. Подскажите, как можно решить описанную проблему?


Название: Re: Коррекировка текстового файла.
Отправлено: Igors от Июнь 18, 2014, 09:10
Сделать все концы строк однообразными, напр как у Вындоуз (0xd0xa)
Код
C++ (Qt)
void SetWinEOL( const QByteArray & src, QByteArray & dst )
{
int last = src.size() - 1;
for (int i = 0; i < src.size(); ++i) {
 char ch = src[i];
 switch (ch) {
  case 0xd:
   dst += ch;
   if (i == last || src[i + 1] != 0xa)
    dst += 0xa;
   break;
 
  case 0xa:
   if (i == 0 || src[i - 1] != 0xd)
    dst += 0xd;
   dst += ch;
   break;
 
  default:
   dst += ch;
 }
}
}


Название: Re: Коррекировка текстового файла.
Отправлено: TsysarAndrew от Июнь 18, 2014, 23:11
Спасибо, помогло.