文章目录
- 一.CSV文件介绍
- 二.创建CSV文件
- 三.写入CSV文件
- 四.读取CSV文件
一.CSV文件介绍
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。
二.创建CSV文件
根据输入文件名和当前的时间创建CSV文件。例如,输入的fileName为"1",当前的时间为2022/12/28 15:37:21,则创建的CSV文件名为1_20221228_153721.csv
void creatCSVFile(QString fileName)
{
QDateTime timeCurrent = QDateTime::currentDateTime(); //获取系统时间
QString time_day = timeCurrent.toString("20yyMMdd"); //年月日转换为Qstring
QString time_hour = timeCurrent.toString("hhmmss"); //时分秒转换为Qstring
QString path_csv = QString("%1_%2_%3.csv").arg(fileName).arg(time_day).arg(time_hour); //设置csv文件的名称
QDir dir(path_csv); //文件路径
if(!dir.exists()) //判断文件是否存在,不存在则创建
{
qDebug() << "no such dir";
if(dir.mkpath(dir.absolutePath()))
{
qDebug() << "creat dir success:" << dir.absolutePath();
}
else
{
qDebug() << "creat dir failed" << dir.absolutePath();
}
}
}
三.写入CSV文件
根据文件路径和数据进行CSV文件的数据写入,写入时可以设置文件的打开方式,如下:
内容 | 值 | 说明 |
---|---|---|
QIODevice::NotOpen | 0x0000 | 设备未打开。 |
QIODevice::ReadOnly | 0x0001 | 设备已打开读取。 |
QIODevice::WriteOnly | 0x0002 | 设备已打开以进行写入。注意,对于文件系统子类(例如QFile),除非与ReadOnly、Append或NewOnly结合使用,否则此模式意味着截断。 |
QIODevice::ReadWrite | ReadOnly | WriteOnly | 该设备可进行读取和写入。 |
QIODevice::Append | 0x0004 | 该设备以追加模式打开,以便将所有数据写入文件末尾。 |
QIODevice::Truncate | 0x0008 | 如果可能,设备在打开之前会被截断。设备的所有早期内容都将丢失。 |
QIODevice::Text | 0x0010 | 读取时,行尾终止符转换为“\n”。写入时,行结尾终止符被转换为本地编码,例如,对于Win32,“\r\n”。 |
QIODevice::Unbuffered | 0x0020 | 绕过设备中的任何缓冲区。 |
QIODevice::NewOnly | 0x0040 | 如果要打开的文件已存在,则失败。仅当文件不存在时创建并打开该文件。 |
QIODevice::ExistingOnly | 0x0080 | 如果要打开的文件不存在,则失败。此标志必须与ReadOnly、WriteOnly或ReadWrite一起指定。 |
void writeCSVFile(QString fileName, QString data)
{
QFile file;
file.setFileName(path_csv);
if(!file.open(QIODevice::Append))
{
//ReadOnly文件不存在,打开失败
//WriteOnly文件不存在,会自动创建文件
//ReadWrite文件不存在,会自动创建文件
//Append文件不存在,会自动创建文件
//Truncate文件不存在,打开失败
//Text文件不存在,打开失败
//Unbuffered文件不存在,打开失败
qDebug()<<"文件打开失败";
}
file.write(data.toStdString().c_str());
file.close();
}
四.读取CSV文件
根据文件路径进行CSV文件的读取,同样的,读取时也可以设置读取方式,如下:
void readCSVFile(QString csvFilePath)
{
QFile csvFile(csvFilePath);
//判断文件是否存在
if (csvFile.exists())
{
if(csvFile.open(QIODevice::ReadOnly))
{
//读取csv文件内容
QTextStream out(&csvFile);
//将csv文件的内容以换行符进行分割成字符串列表
QStringList tempOption = out.readAll().split("\n");
//遍历每行的内容
for (int i = 0; i < tempOption.count(); i++)
{
//每行的内容以","进行分割,生成字符串列表
QStringList tempbar = tempOption.at(i).split(",");
}
}
}
}