• 9484阅读
  • 26回复

[提问]Qt提取字符串信息 [复制链接]

上一主题 下一主题
离线小炮弹弹
 
只看楼主 倒序阅读 楼主  发表于: 2013-01-23
        我有一个字符串,例如:
         QString a;
         a = "12345  dbid=3456
                name    sdfsfsdfsf
                23422  dbid=3456
                name    wwwwwww";
        a里有空格和回车。
         我想从中取出dbid=后面的“3456”和最后的“wwwwwww”怎么取啊?
离线realfan

只看该作者 1楼 发表于: 2013-01-23
QStringList  lstLines = a.split("\n", QString::SkipEmptyParts); //先将各行分别放到lstLines中
QStringList lst = lstLines.at(0).split("=",  QString::SkipEmptyParts); //取第一行,按=分割
QString str3456 = lst.at(1); //分割后的第2个元素

lst =  lstLines.at(3).split(" ",  QString::SkipEmptyParts);
QString strwwww = lst.at(1);


离线小炮弹弹
只看该作者 2楼 发表于: 2013-01-23
如果不知道一共有多少行呢,但那个wwwwwww一定在最后一行里,那怎么取?
离线realfan

只看该作者 3楼 发表于: 2013-01-23
回 2楼(小炮弹弹) 的帖子
int idxLast = lstLines.size() -1;

lst =  lstLines.at(idxLast).split(" ",  QString::SkipEmptyParts);
QString strwwww = lst.at(1);
离线小炮弹弹
只看该作者 4楼 发表于: 2013-01-23
非常感谢,还有这个split切割能不能同时按两个字符切啊?
离线小炮弹弹
只看该作者 5楼 发表于: 2013-01-23
回 3楼(realfan) 的帖子
怎么一这样使用,就出错误啊:
ASSERT  failure in  QList<T>::at:  "index  out  of  range" ,file /usr/include/QtCore/qlist.h,line  439
The program has  unexpectedly  finishen.
自动关闭了。
离线小炮弹弹
只看该作者 6楼 发表于: 2013-01-23
解决了,是写错行了
离线realfan

只看该作者 7楼 发表于: 2013-01-23
回 4楼(小炮弹弹) 的帖子
可以按字符串切割
离线realfan

只看该作者 8楼 发表于: 2013-01-23
回 5楼(小炮弹弹) 的帖子
安全起见,用的时候,加一些边界检查
在线XChinux

只看该作者 9楼 发表于: 2013-01-23
用正则表达式。正则要常用,这样才不会遗忘。下面的是PHP版本的,你自己换成Qt版本的。

<?php                                                                        
$a = <<<EOT                                                                  
12345 dbid=3456                                                              
name    sdfsdfsdf                                                            
234223  dbid=3425                                                            
name   wwwwww                                                                
EOT;                                                                          
preg_match_all('/\s*(dbid=\d+)\s*/', $a, $match);      // 取出dbid=xxxx            
print_r($match);                                                              

preg_match_all('/\s*dbid=(\d+)\s*/', $a, $match);      // 取出dbid=xxxx中后面的xxxxxx
print_r($match);

preg_match_all('/\s*(\w+)\s*$/', $a, $match);       // 取出 wwwwwwww                          
print_r($match);  
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线realfan

只看该作者 10楼 发表于: 2013-01-23
回 9楼(XChinux) 的帖子
嗯,正则表达式处理这类问题,最强大,最方便。
以前用过,时间长不用了,的确生疏了。
离线小炮弹弹
只看该作者 11楼 发表于: 2013-01-23
回 10楼(realfan) 的帖子
又出错误啦,我的切割的最后一段是
“123         dsfjei       234M        ‘/home/123' "
我又按照  ’  切的,切好了,怎么用at(1)就出错,
用at(0)没事啊,就是前面的”123         dsfjei       234M        “,晕。
离线小炮弹弹
只看该作者 12楼 发表于: 2013-01-23
回 10楼(realfan) 的帖子
怎么回事啊,QStringList   list;
我打印list 是(”123         dsfjei       234M       “,”/home/123“),
打印  list.at(0)  是”123         dsfjei       234M      “,打印   list.at(1)   就出上面那个错误,自动关闭。
离线realfan

只看该作者 13楼 发表于: 2013-01-23
回 12楼(小炮弹弹) 的帖子
你把整个这段内容贴上来,我看看。包括被切的原始文本及代码
离线小炮弹弹
只看该作者 14楼 发表于: 2013-01-23
我的不好贴啊,我的虚拟机复制不出来。
但好像,我重关了Qt再开,第一次可以用,第二次再运行就出错
离线小炮弹弹
只看该作者 15楼 发表于: 2013-01-23
QStringList  listlines = outputlist.split("\n",QString::KeepEmptyParts);
int idxlast = listlines.size()-4;
QStringList  listlast = listlines.at(idxlast).split("=",QString::KeepEmptyParts);
QString  list = listlast.at(1);  这里出错,如果是listlast.at(0)就没事。
我直接打印listlast是:
(”123         dsfjei       234M       “,”/home/123“,”“),
离线小炮弹弹
只看该作者 16楼 发表于: 2013-01-23
回 13楼(realfan) 的帖子
还在吗,我贴了一些
离线realfan

只看该作者 17楼 发表于: 2013-01-23
Sorry,写错了一个参数,你把所有
split("....",QString::KeepEmptyParts);
改成
split("....", QString::SkipEmptyParts);

再试试
离线小炮弹弹
只看该作者 18楼 发表于: 2013-01-23
回 17楼(realfan) 的帖子
我开始就觉得这个参数不太对劲,我试试
离线小炮弹弹
只看该作者 19楼 发表于: 2013-01-23
回 17楼(realfan) 的帖子
我晕,改了之后连at(0)都不行了
离线realfan

只看该作者 20楼 发表于: 2013-01-23
QStringList中如果有内容,at(0)肯定可以呀

你把待处理的文本放上来我试试。没有这个,我也说不清楚了。
离线小炮弹弹
只看该作者 21楼 发表于: 2013-01-23
回 17楼(realfan) 的帖子
重新试了,效果一样啊,主要是我那个被切割后的字符串都可以打出来
(”123         dsfjei       234M       “,”/home/123“,”“),
为什么at(0)正常,而at(1)就出错
离线realfan

只看该作者 22楼 发表于: 2013-01-23
回 21楼(小炮弹弹) 的帖子
从你发的字面内容,真是看不出问题。
你检查一下
listlast.size()

离线小炮弹弹
只看该作者 23楼 发表于: 2013-01-23
回 20楼(realfan) 的帖子
我晕那个菜,又好了,不知道能坚持多久
不是我不想贴上来,是我的虚拟机里的贴不出来啊
离线realfan

只看该作者 24楼 发表于: 2013-01-23
回 23楼(小炮弹弹) 的帖子
是不是没有重新编译呀
另外,建议用QString::SkipEmptyParts,不要用KeepEmptyParts
离线小炮弹弹
只看该作者 25楼 发表于: 2013-01-23
回 24楼(realfan) 的帖子
好的,非常感谢,暂时还没出问题
离线realfan

只看该作者 26楼 发表于: 2013-01-23
回 25楼(小炮弹弹) 的帖子
呵呵,那祝你好运吧
快速回复
限100 字节
 
上一个 下一个