QT-CSV文件读写
QT-CSV文件读写
前言
csv文件之所以被用户推荐使用,我觉得即可以用excel打开,同时也是可以用文本编辑器打开,而且文本内容的显示也是比较有规律,用户查看起来也是能清晰看的明白,所以这里其实就是已经讲得出来了,csv的操作,其实就是你平时使用txt文件操作,只是我们按照csv的格式(xxx,xxx 列与列直接用英文逗号分开)进行文本保存,同时将文本的后缀名修改成csv罢了,接下来我们就进行读写的操作具体的了解。
一、CSV文件初始化
那如果我们本地盘符就是不存在csv文件,通常我们都是会先创建一个csv文件,看下下面的程序吧,这样直接点。
// 我们都放C://CSV文件夹里面吧
QString strDir = QString("%1/%2").arg("C://").arg("CSV");
// 先检查有没有文件夹存在,没有就让程序创建文件夹先
QDir dirCSV;
if (!dirCSV.exists(strDir))
dirCSV.mkpath(strDir);
// 使用时间格式进行csv文件命名吧
m_strFilePath = strDir + "/" + QString("csv%1.csv").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd"));
// 因为是文件操作,安全一些都是加个锁
static QMutex mutex;
mutex.lock();
QFile fileCSV;
// 判断文件是否不存在
if (!fileCSV.exists(m_strFilePath))
{
QFile file(m_strFilePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
{
QTextStream in(&file);
QString strText("");
// 文件不存在,第一次,我们就给他写个列表名字,这样csv文件打开时候查看的时候就比较清晰
strText = QString("DateTime,") + QString("Info");
in << strText << '\n';
file.close();
}
}
mutex.unlock();
二、CSV写入
写入的方式其实就是按照我们之前定义的格式写入就行了,主要文件打开的方式就行了,读取的也是一样吗,这里不做赘述。
static QMutex mutex;
mutex.lock();
QFile file(m_strFilePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
{
QString strCurTime = QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss");
QTextStream in(&file);
QString strMessage = QString(u8"%1,%2").arg(strCurTime).arg(strText);
in << strMessage << '\n';
file.close();
}
mutex.unlock();
三、CSV读取
static QMutex mutex;
mutex.lock();
QFile file(m_strFilePath);
if (file.open(QIODevice::ReadOnly))
{
QTextStream out(&file);
QStringList tempOption = out.readAll().split("\n");
for (int i = 0; i < tempOption.count(); i++)
{
float fArea = 0;
QStringList tempbar = tempOption.at(i).split(",");
tempbar.removeLast(); // last is empty item
if (tempbar.size() > 0)
{
if (tempbar.at(0).indexOf(QString("DateTime")) != -1)
continue;
m_StrAlarmInfoList << tempOption[i];
}
}
}
file.close();
mutex.unlock();