QFile和QDataStream无法对文本读取
我建立了一个小实验,测试是否能够通过QFile和QDataStream来tokenize文本的内容。但是测试失败。我这里有一个文本内容是这样的:
TestFile.txt---------
abc def ghi
我想输出的结果是这样的:abcdefghi
源文件是这样的…………
#include <iostream>
#include <QFile>
#include <QDataStream>
#include <QString>
int main( int argc, char** argv )
{
using namespace std;
QFile file;
file.setFileName( "TestFile.txt" );
if ( !file.open( QIODevice::ReadOnly ) )
cout << "无法打开文件。\n";
cout << "打开文件成功!准备输出数据。\n";
QDataStream in( &file );
QString checkStr;
do
{
in >> checkStr;
cout << (char*)checkStr.data( );
}
while ( !checkStr.isEmpty( ) );
file.close( );
return 0;
}
但是程序无法去掉空格将文件的内容逐一输出。我改怎么做才能达到效果呢?
[最优解释]
trim一下不好么?
如果你是2进制文件用datastream比较好,文本文件textstream比较好。
如果你知道文件格式。使用文件偏移量直接读取,用datastream + readRawData.方法比较好。
大家还有啥其他经验和方法跟帖哈。
[其他解释]
QDataStream是二进制读写,QTextStream才是文本读写用的。
用QString::replace(" ", "");将空格替换掉,就成一串了。
[其他解释]
遍历一下QString中的字符如果满足bool QChar::isSpace () const这个就把它移除
[其他解释]
你这属于QString 的问题...
QString str = "abc def hijk";
int len = str.length();
int i=0;
for(i; i<len; i++)
{
if(str.at(i).isSpace())
str.remove(i,1);
}
qDebug()<<str;
#include <QApplication>
#include <QLabel>
#include <QFile>
#include <QDataStream>
#include <QString>
int main( int argc, char** argv )
{
QApplication app( argc, argv );
QFile file( "TestFile.txt" );
QString showStr( "Empty String." );
QLabel showLabel;
if ( !file.open( QIODevice::ReadOnly ) )
{
showStr = "Can't open file.";
}
QDataStream in( &file );
in >> showStr;
file.close( );
showLabel.setText( showStr );
showLabel.setWindowTitle( "Experimental" );
showLabel.setFixedSize( 200, 50 );
showLabel.show( );
return app.exec( );
}
#include <iostream>
#include <QFile>
#include <QTextStream>
#include <QString>
int main( int argc, char** argv )
{
using namespace std;
QFile file;
file.setFileName( "TestFile.txt" );
if ( !file.open( QIODevice::ReadOnly ) )
cout << "无法打开文件。\n";
cout << "打开文件成功!准备输出数据。\n";
//QDataStream in( &file );
QTextStream in( &file );
QString checkStr;
do
{
in >> checkStr;
cout << checkStr.toAscii().constData( );
}
while ( !checkStr.isEmpty( ) );
file.close( );
return 0;
}