有人熟悉如何解析csv文件并将其放入字符串列表吗?现在我正在将整个csv文件放入字符串列表中。我正在尝试找出是否有方法只获取第一列。
#include "searchwindow.h"
#include <QtGui/QApplication>
#include <QApplication>
#include <QStringList>
#include <QLineEdit>
#include <QCompleter>
#include <QHBoxLayout>
#include <QWidget>
#include <QLabel>
#include <qfile.h>
#include <QTextStream>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *widget = new QWidget();
QHBoxLayout *layout = new QHBoxLayout();
QStringList wordList;
QFile f("FlightParam.csv");
if (f.open(QIODevice::ReadOnly))
{
//file opened successfully
QString data;
data = f.readAll();
wordList = data.split(',');
f.close();
}
QLabel *label = new QLabel("Select");
QLineEdit *lineEdit = new QLineEdit;
label->setBuddy(lineEdit);
QCompleter *completer = new QCompleter(wordList);
completer->setCaseSensitivity(Qt::CaseInsensitive); //Make caseInsensitive selection
lineEdit->setCompleter(completer);
layout->addWidget(label);
layout->addWidget(lineEdit);
widget->setLayout(layout);
widget->showMaximized();
return a.exec();
}
6条答案
按热度按时间disho6za1#
这就对了:
飞行参数.csv
主文件. cpp
第1001章:我的main.pro
生成并运行
输出
6yt4nkrj2#
你要找的是一个QTextStream类。它提供了各种阅读文件的接口。
举个简单的例子:
或者是的,你可以这样做,这将有相同的结果:
5lhxktic3#
这是我经常使用的代码。我是作者,按原样考虑这个,公共域(gist)。它与CodeLurker's code具有相似的特性集和概念,除了状态机的表示方式不同,代码稍短。
in
,一个QTextStream
。row
,将接收行的QStringList
。true
;如果EOF,则返回false
。std::runtime_error
。它可以解析Excel风格的CSV文件,正确处理引号和双引号,并允许在字段中换行。只要你的文件是用
QFile::Text
打开的,它就可以正确处理Windows和Unix的行尾。我认为Qt不支持老式的Mac行尾,也不支持二进制模式的未翻译行尾,但现在大多数情况下这应该不是问题。其他注意事项:
x"y"z
解析为xyz
,不确定字符串中间引号的规则是什么。我不知道这是否正确。QChar
应该很简单。示例:
kx1ctssn4#
人们可能更喜欢这样做:
编辑:我终于有时间来修剪字段前后的空格了。引号内的空格和逗号都不会被修剪。否则,所有的空格都会从字段的开始和结束处被修剪。在对这个问题困惑了一段时间后,我突然想到可以在字段周围留下引号;和文本前后的空白被删除,然后添加最后一步,去掉以引号开头和结尾的字段的引号。
下面是一个或多或少具有挑战性的测试用例:
这对应于文件
其中表示制表符;并且每一行都被依次送入parseCSV()。不要这样写.csv文件!
它的输出是(其中qDebug()用
\"
表示字符串中的引号,并将内容放在引号和括号中):您可以观察到,引号和额外的空格保留在条目“two”的引号内。在“and a half”的格式错误的情况下,引号之前的空格和最后一个单词之后的空格被删除;但其他字段没有。此例程中缺少结尾空格可能表示缺少结尾引号。字段中没有开始或结束的引号只被视为字符串的一部分。如果引号不是字段的开头,则不会从字段的结尾删除引号。若要检测此处的错误,只需检查以引号开始但不以引号结束的字段;和/或包含引号但不以引号开头和结尾的字符串。
我知道,这比你的测试案例所需要的要多;但是,一个坚实的一般答案?,尽管如此-也许对其他人谁已经发现了它。
改编自:https://github.com/hnaohiro/qt-csv/blob/master/csv.cpp
ndasle7k5#
尝试使用qtcsv库阅读和写入csv文件。示例:
我试着让它变得小巧易用。请参阅Readme文件中的库文档和其他代码示例。
vc6uscn96#
然后
我不确定add函数是否存在,是否要添加到数组中-让我们调用第1列