You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.2 KiB
139 lines
3.2 KiB
#include "header/FileHelper.h"
|
|
|
|
#include <QFile>
|
|
#include <QDir>
|
|
#include <QDebug>
|
|
|
|
bool FileHelper::ReadInputFile(QByteArray& arr, QString path, quint64 *width, quint64 *height)
|
|
{
|
|
QFile file(path);
|
|
file.open(QIODevice::ReadOnly);
|
|
|
|
char data[20000];
|
|
|
|
bool first = true;
|
|
while (file.readLine(data, 20000))
|
|
{
|
|
QString str(data);
|
|
if(str.length() == 0)
|
|
break;
|
|
(*height)++;
|
|
str = str.remove(str.length() - 1, 1);
|
|
auto sl = str.split(",");
|
|
if(first)
|
|
{
|
|
*width = sl.length();
|
|
first = false;
|
|
}
|
|
else if (sl.length() != *width)
|
|
{
|
|
qDebug() << "Some thing wrong here " << *width << " " << sl.length();
|
|
return false;
|
|
}
|
|
for(int i = 0; i < sl.length(); i++)
|
|
{
|
|
auto t = sl[i].PARSE;
|
|
|
|
arr.append(static_cast<char>(t));
|
|
arr.append(static_cast<char>((t >> 8)));
|
|
arr.append(static_cast<char>((t >> 16)));
|
|
arr.append(static_cast<char>((t >> 24)));
|
|
#ifdef USE_DBL
|
|
arr.append(static_cast<char>((t >> 32)));
|
|
arr.append(static_cast<char>((t >> 40)));
|
|
arr.append(static_cast<char>((t >> 48)));
|
|
arr.append(static_cast<char>((t >> 56)));
|
|
#endif
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool FileHelper::ReadInputFile(myint *arr, QString path, quint64 *width, quint64 *height)
|
|
{
|
|
QFile file(path);
|
|
file.open(QIODevice::ReadOnly);
|
|
|
|
char data[200000];
|
|
|
|
bool first = true;
|
|
int index = 0;
|
|
while (file.readLine(data, 200000))
|
|
{
|
|
QString str(data);
|
|
if(str.length() == 0)
|
|
break;
|
|
(*height)++;
|
|
str = str.remove(str.length() - 1, 1);
|
|
auto sl = str.split(",");
|
|
if(first)
|
|
{
|
|
*width = sl.length();
|
|
first = false;
|
|
}
|
|
else if (sl.length() != *width)
|
|
{
|
|
qDebug() << "Some thing wrong here " << *width << " " << sl.length();
|
|
return false;
|
|
}
|
|
for(int i = 0; i < sl.length(); i++)
|
|
{
|
|
auto x = sl[i].PARSE;
|
|
arr[index++] = x;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool FileHelper::WriteOutputFile(char* arr, QString path, quint64 width, quint64 height)
|
|
{
|
|
QFile file(path);
|
|
file.open(QIODevice::WriteOnly);
|
|
|
|
for(int i = 0; i < height;i++)
|
|
{
|
|
int index = i * sizeof (myflt) * width;
|
|
QString str;
|
|
for(int j = 0; j < width; j++)
|
|
{
|
|
#ifdef USE_DBL
|
|
quint64 temp = 0;
|
|
temp = (((quint64)(arr[index++] & 0xFF))) | (((quint64)(arr[index++] & 0xFF)) << 8)
|
|
| (((quint64)(arr[index++] & 0xFF)) << 16) | (((quint64)(arr[index++] & 0xFF)) << 24)
|
|
| (((quint64)(arr[index++] & 0xFF)) << 32) | (((quint64)(arr[index++] & 0xFF)) << 40)
|
|
| (((quint64)(arr[index++] & 0xFF)) << 48) | (((quint64)(arr[index++] & 0xFF)) << 56);
|
|
auto d = *((double*)(&temp));
|
|
#else
|
|
quint32 temp = 0;
|
|
temp = (((quint64)(arr[index++] & 0xFF))) | (((quint64)(arr[index++] & 0xFF)) << 8)
|
|
| (((quint64)(arr[index++] & 0xFF)) << 16) | (((quint64)(arr[index++] & 0xFF)) << 24);
|
|
auto d = *((float*)(&temp));
|
|
#endif
|
|
str += QString("%1").arg(temp, 16, 16, QChar('0'));
|
|
if(j != width - 1)
|
|
str += ",";
|
|
}
|
|
str += "\n";
|
|
file.write(str.toLocal8Bit());
|
|
}
|
|
}
|
|
|
|
bool FileHelper::WriteOutputFile(myflt* arr, QString path, quint64 width, quint64 height)
|
|
{
|
|
QFile file(path);
|
|
file.open(QIODevice::WriteOnly);
|
|
|
|
for(int i = 0; i < height;i++)
|
|
{
|
|
int index = i * width;
|
|
QString str;
|
|
for(int j = 0; j < width; j++)
|
|
{
|
|
str += QString::number(arr[index + j], 'f', 6);
|
|
if(j != width - 1)
|
|
str += ",";
|
|
}
|
|
str += "\n";
|
|
file.write(str.toLocal8Bit());
|
|
}
|
|
}
|
|
|