|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 leeking30 于 2011-6-16 21:54 编辑
问题是这样的 有个朋友说他有些txt文档, 这些文档是用一个软件算出来的 里面有 文字 还有一些数据 朋友想要这些数据 而且按照一定的格式输出来, 他临近毕业 很急, 小弟觉得问题不难, 就自告奋勇帮他搞定. 我用matlab 弄了2-3小时 就得到了他想要的东西
等小弟把东西给他时 他突然说 他必须用C++编...可小弟从来没有用过C 或者C++ 的经验 (大一上课除外),同时朋友见我用matlab已经得到他想要的东西 十分渴望我帮他用C++搞定 或者给他一些实质性建议 (他会点C++ 但是水平也不敢恭维)
想起上次小弟遇到python的问题(也是第一次用) 但是需要改一些程序, 得到Rainyboy, wqsong, smtmobly三位版主 鼎力相助, 迅速解决问题
因此小弟再次来到程序语言板块 (平时一般只逛振动板块) , 寻求论坛上的朋友相助
问题是这样的 , 手头上的txt文件里面的东西如下所示
set encoding iso_8859_1
set style fill solid .5 noborder
(省略好多冗余信息)
0 0 % 想要的数据信息
100000 0
e
set encoding iso_8859_1
set style fill solid .5 noborder
(省略好多冗余信息)
0 0 % 想要的数据信息
100000 0
e
set encoding iso_8859_1
set style fill solid .5 noborder
(省略好多冗余信息)
0 0 % 想要的数据信息
4551 0
e
4551 1
4551 1
e
编程目的: 提取文档中的 数字信息, 如
0 0
100000 0 等等 等等
要求格式:
按照不同工况分别输出一个h*2的矩阵. 每个工况 以set encoding iso_8859_1开头, 也就是说 上面这段例子中有3个工况
那么输出就可以为
A1 = 0 0
100000 0
A2= 0 0
100000 0
A3= 0 0
4551 0
4551 1
4551 1
编程思路 (或者说我在matlab中的编程思路):
1. 使用textread 读入文档 (读入后是一个m*1 的cell矩阵)
2. 使用个循环 使用findstr命令找关键词 iso_8859_1, 这样就确定了 总共有多少个工况, 假设是N个, 而且知道每个工况从总文件的第
几句开始, 第几句结束
3. 确定每个工况中 有多少组数据,举个例子说明这个问题: 在上述文档中 A1中有1组数据, A2中有1组数据, A3中2组数据, 可以观察到
每组数据都用 写在下一行的 一个字母e来作为结束. 所以我依然使用findstr命令 找第一个字母是e的语句, 通过这样的方法, 就可以确
定每个工况中有多少组数据. 假设工况1 为 Y1 组数据 , 工况2 Y2组 一直到工况 N, YN组数据. 同事观察到每组数据只有2行 (也就是每个e前面的两行数据) , 那么对于每工况N 可以定义一个 AN= (2*YN)行 2列的矩阵 in order to 输出
4. 最后一步, 根据之前所述, 写个循环i=1:N(从第二步得到的总共的工况数)
定义一个AN矩阵 (矩阵size有第三步得到) , 然后重复第三步 (有点笨, 编的时候没多想) ,
嵌套一个循环 每个循环从这个工况的第一句开始 最后一句结束
循环中 每找到一个开头是e的行, 就将 e 前两行的值 赋给 AN, (前面说了,AN 的size的行数刚好是两倍 的e出现的次数YN)
这个从第二步中 得到的, 注意个问题: 前N-1个工况 都可以从这个工况
的第一句开始,下一个工况的第一句也就是出现ISO_88859_1 这句的行数 减去1行 作为结束, 但是最后一个工况 没有 再下一个工况了, 所以这个循环从最后一个工况第一句开始, 在全部文档最后一句的行数结束, matlab程序实现是用一个if模块进行判断的)
思路叙述就这么多了 我把 我写的m文件 和 txt文档 都 include在这个帖里 有兴趣的朋友可以试下 matlab输出是OK的
希望论坛中有C++经验的朋友 能给点建议(主要是matlab 函数 对应的C++ 库函数的命令), 要能直接帮编下就更感激不尽了
m文件
test.txt
(1.29 KB, 下载次数: 1)
论坛不让传m后缀名的文件 请将text.txt改成text.m
数据文件
fff.txt
(223.93 KB, 下载次数: 0)
简单说明下:
读者可运行m文件 (把两个文件放统一路径中) 得到从A1 到A28 个矩阵 说明有28个工况 这些矩阵就是转成C++后 想得到的东西
就这么多了 打字很累啊 :)
|
|