声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3010|回复: 3

[C/C++] C++程序提取txt文件的信息 咨询帖

[复制链接]
发表于 2011-6-16 21:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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++后  想得到的东西

就这么多了 打字很累啊 :)

回复
分享到:

使用道具 举报

 楼主| 发表于 2011-6-21 22:08 | 显示全部楼层
基本搞定了 谢谢大家关注
发表于 2011-6-23 09:47 | 显示全部楼层
回复 2 # leeking30 的帖子

呵呵,祝贺祝贺,这几天在家,有电脑但是没有VC++,只有python,没帮上忙……
 楼主| 发表于 2011-6-24 21:44 | 显示全部楼层
回复 3 # Rainyboy 的帖子

谢谢版主关心 以后有机会再讨教
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 10:44 , Processed in 0.068825 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表