• 7653阅读
  • 9回复

[提问]怎么从文本中读数据 [复制链接]

上一主题 下一主题
离线toolc
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-05
关键词: 求助
请教一下,如何像C++中fstream的>>方式一个一个读文本中的数字或者字符串,读到以后自己判别int /double/qstring类型,不用转格式,比如txt里的数据是:

时间  数据1  数据2
2011-05-05  36  71.6
2011-05-06  37  1.4

感觉QT太麻烦,QTextstream用readline读了,再用QStringList分开,然后再用todouble转格式,好麻烦啊,求教用什么函数读起来方便,先行谢过!
离线jdwx

只看该作者 1楼 发表于: 2011-05-05
感觉QT太麻烦,QTextstream用readline读了,再用QStringList分开,然后再用todouble转格式,好麻烦啊,求教用什么函数读起来方便,先行谢过!
首先写程序就是不要怕麻烦,想要程序可靠就得对数据进行大量检测,确保数据合格。
上面的方法我看已经很简单了。
估计你是想用VB里的InPut。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线toolc
只看该作者 2楼 发表于: 2011-05-05
谢谢你
我的意思是有没有类似c++里fstream的>>用法,这样可以不用转数据类型;QT好像写文本可以用<<,但是读数的话好像不能用>>。
离线jdwx

只看该作者 3楼 发表于: 2011-05-06
看看帮助,有你说的功能。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线toolc
只看该作者 4楼 发表于: 2011-05-06
能否告知,我查了没找到相应的函数啊,呵呵
离线jdwx

只看该作者 5楼 发表于: 2011-05-06
Public Functions
QTextStream ()
QTextStream ( QIODevice * device )
QTextStream ( FILE * fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite )
QTextStream ( QString * string, QIODevice::OpenMode openMode = QIODevice::ReadWrite )
QTextStream ( QByteArray * array, QIODevice::OpenMode openMode = QIODevice::ReadWrite )
QTextStream ( const QByteArray & array, QIODevice::OpenMode openMode = QIODevice::ReadOnly )
virtual    ~QTextStream ()
bool    atEnd () const
bool    autoDetectUnicode () const
QTextCodec *    codec () const
QIODevice *    device () const
FieldAlignment    fieldAlignment () const
int    fieldWidth () const
void    flush ()
bool    generateByteOrderMark () const
int    integerBase () const
QLocale    locale () const
NumberFlags    numberFlags () const
QChar    padChar () const
qint64    pos () const
QString    read ( qint64 maxlen )
QString    readAll ()
QString    readLine ( qint64 maxlen = 0 )
RealNumberNotation    realNumberNotation () const
int    realNumberPrecision () const
void    reset ()
void    resetStatus ()
bool    seek ( qint64 pos )
void    setAutoDetectUnicode ( bool enabled )
void    setCodec ( QTextCodec * codec )
void    setCodec ( const char * codecName )
void    setDevice ( QIODevice * device )
void    setFieldAlignment ( FieldAlignment mode )
void    setFieldWidth ( int width )
void    setGenerateByteOrderMark ( bool generate )
void    setIntegerBase ( int base )
void    setLocale ( const QLocale & locale )
void    setNumberFlags ( NumberFlags flags )
void    setPadChar ( QChar ch )
void    setRealNumberNotation ( RealNumberNotation notation )
void    setRealNumberPrecision ( int precision )
void    setStatus ( Status status )
void    setString ( QString * string, QIODevice::OpenMode openMode = QIODevice::ReadWrite )
void    skipWhiteSpace ()
Status    status () const
QString *    string () const
QTextStream &    operator<< ( QChar c )
QTextStream &    operator<< ( signed short i )
QTextStream &    operator<< ( float f )
QTextStream &    operator<< ( const QString & string )
QTextStream &    operator<< ( char c )
QTextStream &    operator<< ( unsigned short i )
QTextStream &    operator<< ( signed int i )
QTextStream &    operator<< ( unsigned int i )
QTextStream &    operator<< ( signed long i )
QTextStream &    operator<< ( unsigned long i )
QTextStream &    operator<< ( qlonglong i )
QTextStream &    operator<< ( qulonglong i )
QTextStream &    operator<< ( double f )
QTextStream &    operator<< ( const QByteArray & array )
QTextStream &    operator<< ( const char * string )
QTextStream &    operator<< ( const void * ptr )
下面的那些
QTextStream &    operator>> ( QChar & c )
QTextStream &    operator>> ( signed short & i )
QTextStream &    operator>> ( float & f )
QTextStream &    operator>> ( QString & str )
QTextStream &    operator>> ( char & c )
QTextStream &    operator>> ( unsigned short & i )
QTextStream &    operator>> ( signed int & i )
QTextStream &    operator>> ( unsigned int & i )
QTextStream &    operator>> ( signed long & i )
QTextStream &    operator>> ( unsigned long & i )
QTextStream &    operator>> ( qlonglong & i )
QTextStream &    operator>> ( qulonglong & i )
QTextStream &    operator>> ( double & f )
QTextStream &    operator>> ( QByteArray & array )
QTextStream &    operator>> ( char * c )
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线toolc
只看该作者 6楼 发表于: 2011-05-08
感激涕零,谢谢了老兄
离线toolc
只看该作者 7楼 发表于: 2011-05-14
问题已解决:
        我之前用>>所以不成功,是因为只定义了对象QTextStreamin(应该是QTextStreamin(&file)),没有把file的地址给对象in,所以用>>读不到东西,QT中的>>和C++中的>>功能是一致的。
        再次请教一下jdwx兄:
        帮助文档中 QTextStream 和 QTextStream  & 有什么区别?
[ 此帖被toolc在2011-05-14 14:12重新编辑 ]
离线闲雨

只看该作者 8楼 发表于: 2011-05-16
楼主能讲解一下《《 》》的使用方法吗,这个东西我一直很纠结
离线toolc
只看该作者 9楼 发表于: 2011-05-16
回 8楼(闲雨) 的帖子
举个例子:
假如有个文本,有3个数,如下:
3.14  abc  5
中间用空格隔开。

定义一个QFile对象file,再定义一个流读取对象QTextStream为in(&file),定义QString变量str,double变量x,int变量y,
当执行语句:       in>>x>>str>>y;
str、x、y分别被赋值为abc、3.14、5。

当你知道一个大量数据的文本及其格式的时候,这种流输入输出的方式很方便。
快速回复
限100 字节
 
上一个 下一个