• 8667阅读
  • 10回复

[提问]关于QTextstream [复制链接]

上一主题 下一主题
离线houlixiao
 
只看楼主 正序阅读 楼主  发表于: 2012-02-02
关键词: 求助
当用QTextstream读取文本文件时,如何跳到指定行,再开始读呢?谢谢……
好好学习
离线houlixiao
只看该作者 10楼 发表于: 2012-02-23
它是CAD输出文件的一种,是DXF格式的。里边是可见的文本格式关于图形的信息!
好好学习
离线icyrat

只看该作者 9楼 发表于: 2012-02-13
      DXF什么东东
离线houlixiao
只看该作者 8楼 发表于: 2012-02-03
谢谢大家了,学了不少,发现我这个只能顺序读下去!其实我就是要读取DXF文件!感觉挺难的!哪位有关于这方面的经验,是否可分享一下!先谢谢了!
好好学习
离线cutemmll
只看该作者 7楼 发表于: 2012-02-02
引用第6楼jdwx于2012-02-02 14:29发表的  :
要是数据有500W行怎么办?
还是要判断现在在哪一行。
全部读进来,要很多内存啊.

这种时候就得拆分了。
可以把文本文件中的部分/全部数据放入QStringList中
我在上文不是说了么,汗
c------------enjoy qt & enjoy life-----------++
离线jdwx

只看该作者 6楼 发表于: 2012-02-02
引用第5楼cutemmll于2012-02-02 13:48发表的  :
要跳到某一行读取数据,基于QTextStream进行处理是不合理的。除非文本文件中每行的字符数是完全一致的。
可以把文本文件中的部分/全部数据放入QStringList中。用QStringList定位到某一行就很方便了。如下:
[code]    QFile file("input.txt");
    if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
        return;
.......

要是数据有500W行怎么办?
还是要判断现在在哪一行。
全部读进来,要很多内存啊.
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cutemmll
只看该作者 5楼 发表于: 2012-02-02
要跳到某一行读取数据,基于QTextStream进行处理是不合理的。除非文本文件中每行的字符数是完全一致的。
可以把文本文件中的部分/全部数据放入QStringList中。用QStringList定位到某一行就很方便了。如下:
  1.     QFile file("input.txt");
  2.     if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
  3.         return;
  4.     QStringList lines;
  5.     QTextStream st(&file);
  6.     while(!st.atEnd())
  7.         lines << st.readLine();
  8.     file.close();
  9.     //打印第10行的数据
  10.     qDebug()<< lines.value(9);
如果每行字符数完全一致,那么可以用QTextStream的seek方法进行定位。
假设文本中每行都含有10个字符(包含换行符在内),那么定位到某一行的函数可以定义如下
  1. const int CharacterCount (10);
  2. bool gotoLine(int lineNum,QTextStream& ts)
  3. {
  4.     bool ret = false;
  5.     if(ts.device() && ts.device()->isReadable())
  6.     {
  7.         ret = ts.seek((lineNum-1)*CharacterCount);
  8.     }
  9.     return ret;
  10. }






c------------enjoy qt & enjoy life-----------++
离线benbenmajia

只看该作者 4楼 发表于: 2012-02-02
呃,这些功课自己做做比较好
安然.....
离线淳于半邪

只看该作者 3楼 发表于: 2012-02-02
QString QTextStream::readLine ( qint64 maxlen = 0 )
Reads one line of text from the stream, and returns it as a QString. The maximum allowed line length is set to maxlen. If the stream contains lines longer than this, then the lines will be split after maxlen characters and returned in parts.
If maxlen is 0, the lines can be of any length. A common value for maxlen is 75.
The returned line has no trailing end-of-line characters ("\n" or "\r\n"), so calling QString::trimmed() is unnecessary.
If the stream has read to the end of the file, readLine() will return a null QString. For strings, or for devices that support it, you can explicitly test for the end of the stream using atEnd().

摘自帮助文档
离线jdwx

只看该作者 2楼 发表于: 2012-02-02
回 楼主(houlixiao) 的帖子
通过readline移动到指定行。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线wxj120bw

只看该作者 1楼 发表于: 2012-02-02
回 楼主(houlixiao) 的帖子
应该不行吧
快速回复
限100 字节
 
上一个 下一个