• 8933阅读
  • 16回复

[提问]菜鸟求救,Qt 怎么读文件啊~~ [复制链接]

上一主题 下一主题
离线b05071262
 

只看楼主 倒序阅读 楼主  发表于: 2011-02-16



     net6 addr: fe80::20c:29ff:fedb:c829/64 Scope:Link
          inet addr:10.20.7.236  Bcast:10.20.7.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fedb:c829/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
上面这段文字是我想读文件。现在我想要第指定读出第2行的三个IP地址,分别存到

QLineEdit里面,不懂如何截取出10.20.7.236     10.20.7.255     255.255.255.0


顺带问下Qt里面有没指定读某行的API~?


离线b05071262

只看该作者 1楼 发表于: 2011-02-16
先谢过 各位大侠~~!
离线roywillow

只看该作者 2楼 发表于: 2011-02-16
用QTextStream的readLine试试
但是如果想一次就定位到要读取的那一行似乎有些困难
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线b05071262

只看该作者 3楼 发表于: 2011-02-16
回 2楼(roywillow) 的帖子
readLine 不能直接指定读行
离线voidbroken

只看该作者 4楼 发表于: 2011-02-16
正则
离线roywillow

只看该作者 5楼 发表于: 2011-02-16
因为每行的宽度不一样,所以就算是能直接读某一行估计也得先从头一行一行的计算吧……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线b05071262

只看该作者 6楼 发表于: 2011-02-16
回 4楼(voidbroken) 的帖子
我是想用正则 感觉行不通
离线jdwx

只看该作者 7楼 发表于: 2011-02-16
先ReadLine,在用QString::split(“ ”)分解,
下一步检查每个字符串里是否有冒号,有就QString::split(“:”)分解成两个字符串,第二个就是ip
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线b05071262

只看该作者 8楼 发表于: 2011-02-16
回 7楼(jdwx) 的帖子
谢谢啦~~!我去试试
离线wxj120bw

只看该作者 9楼 发表于: 2011-02-16
to 用正则方便些,可以这样尝试
    QString str = "inet addr:10.20.7.236  Bcast:10.20.7.255  Mask:255.255.255.0";
    QString pattern("inet addr:(.*)  Bcast:(.*)  Mask:(.*)");
    QRegExp rx(pattern);
    int pos = str.indexOf(rx);
    if ( pos >= 0 )
    {
        qDebug() << " rx.cap(1) " << rx.cap(1);
        qDebug() << " rx.cap(2) " << rx.cap(2);
        qDebug() << " rx.cap(3) " << rx.cap(3);
   }
}
离线wter27
只看该作者 10楼 发表于: 2011-02-16
可以用indexof找到inet addr:等的位置,然后计算出IP大小。用mid读出指定位置的QString。。。
离线wter27
只看该作者 11楼 发表于: 2011-02-16
回 9楼(wxj120bw) 的帖子
果然是好方法啊。。。。受教
离线b05071262

只看该作者 12楼 发表于: 2011-02-17
回 9楼(wxj120bw) 的帖子
太感谢你了。。我做是做出来了,,你这个方法比我的简单易懂多了~~!
离线b05071262

只看该作者 13楼 发表于: 2011-02-17
我把获取第二行字符串代码添上,方便和我类似的初学者参考。。

QFile file("winter.txt");
if (!file.open(QIODevice::ReadOnly)) {
    std::cerr << "Cannot open file for reading: "
    << qPrintable(file.errorString()) << std::endl;
    return 0;
    }
    QTextStream reader(&file);
QString line;
QStringList list1;
  line = reader.readAll();
list1 = line.split("\n");
QString str(list1.at(1));
QString pattern("inet addr:(.*)  Bcast:(.*)  Mask:(.*)");
    QRegExp rx(pattern);
    int pos = str.indexOf(rx);
    if ( pos >= 0 )
    {
        qDebug() << " rx.cap(1) " << rx.cap(1);
        label->setText(rx.cap(1));
        qDebug() << " rx.cap(2) " << rx.cap(2);
        qDebug() << " rx.cap(3) " << rx.cap(3);
   }

感谢大家的回答。感谢 wxj120bw,,感谢7楼。。
离线roywillow

只看该作者 14楼 发表于: 2011-02-17
最后还是得先全部读入然后再找第二行啊
感觉读入整个再分割不如直接就一行一行读取到QString然后添加到QStringList里节约
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线b05071262

只看该作者 15楼 发表于: 2011-02-17
回 14楼(roywillow) 的帖子
说的是,,我犯傻了~~!呵呵
离线b05071262

只看该作者 16楼 发表于: 2011-02-17
QStringList list;
    while(!reader.atEnd())
    {
        list<<(reader.readLine());
    }
    
    QString str(list.at(1));

改掉readAll
快速回复
限100 字节
 
上一个 下一个