Python中文
首页
教程
问答
标签
搜索
登录
注册
为了避免“Python”,我们应该避免C++中重复的代码吗?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<P>我在Python和前卵子阶段的C++阶段,但我正在尽我最大的努力,特别是“不要重复你自己”的原则。在</p> <p>我有一个多通道的原始文件格式要打开,有一个主要的ascii头文件,其中的字段可以表示为字符串和整数(总是用空格填充字符编码)。第二部分是N个报头,N是主报头的一个字段,每个报头本身都有更多的文本和数字字段(编码为ascii),参考构成文件其余部分的实际16位多通道流的长度和大小。在</p> <P>到目前为止,我在C++中有这个工作代码:</p> <pre><code>#include <iostream> #include <sstream> #include <fstream> #include <string> #include <map> using namespace std; struct Header { string version; string patinfo; string recinfo; string start_date; string start_time; int header_bytes; string reserved; int nrecs; double rec_duration; int nchannels; }; struct Channel { string label; string transducertype; string phys_dim; int pmin; int pmax; int dmin; int dmax; string prefiltering; int n_samples; string reserved; }; int main() { ifstream edf("/home/helton/Dropbox/01MIOTEC/06APNÉIA/Samples/Osas2002plusQRS.rec", ios::binary); // prepare to read file header Header header; char buffer[80]; // reads header fields into the struct 'header' edf.read(buffer, 8); header.version = string(buffer, 8); edf.read(buffer, 80); header.patinfo = string(buffer, 80); edf.read(buffer, 80); header.recinfo = string(buffer, 80); edf.read(buffer, 8); header.start_date = string(buffer, 8); edf.read(buffer, 8); header.start_time = string(buffer, 8); edf.read(buffer, 8); stringstream(buffer) >> header.header_bytes; edf.read(buffer, 44); header.reserved = string(buffer, 44); edf.read(buffer, 8); stringstream(buffer) >> header.nrecs; edf.read(buffer,8); stringstream(buffer) >> header.rec_duration; edf.read(buffer,4); stringstream(buffer) >> header.nchannels; /* cout << "'" << header.version << "'" << endl; cout << "'" << header.patinfo << "'" << endl; cout << "'" << header.recinfo << "'" << endl; cout << "'" << header.start_date << "'" << endl; cout << "'" << header.start_time << "'" << endl; cout << "'" << header.header_bytes << "'" << endl; cout << "'" << header.reserved << "'" << endl; cout << "'" << header.nrecs << "'" << endl; cout << "'" << header.rec_duration << "'" << endl; cout << "'" << header.nchannels << "'" << endl; */ // prepare to read channel headers int ns = header.nchannels; // ns tells how much channels I have char title[16]; // 16 is the specified length of the "label" field of each channel for (int n = 0; n < ns; n++) { edf >> title; cout << title << endl; // and this successfully echoes the label of each channel } return 0; }; </code></pre> <p>我已经说过:</p> <ul> <li>我选择使用struct是因为格式规范是非常硬编码的</li> <li>我没有迭代主头字段,因为在我看来,要读取的字节和类型的数量相当随意</li> <li>现在我成功地获得了每个通道的标签,实际上我将为每个通道的字段创建结构,这些字段本身可能必须存储在一个映射中。在</li> </ul> <p>我的问题是:</p> 我是否担心抄近路使这种代码更“Python”(更抽象,更不重复),或者这不是C++中的工作方式?在</p> <p>许多Python的福音传道者(就像我自己一样,因为我喜欢它)强调它的易用性和所有这些。所以,我会想一段时间,如果我做蠢事或只是做正确的事情,但不是那么“自动”,因为非常自然的C++。在</p> <p>谢谢你的阅读</p> <p>赫尔顿</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>这段代码简单明了,易于理解。如果能用的话,别浪费时间换了。我相信有很多写得不好、复杂、难以理解(可能还有不正确)的代码需要首先修复:)</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
5 回答
如何添加表示整数的擦边字符串?
9 回答
如何添加要在Bokeh中使用的新font.ttf文件?
10 回答
如何添加要显示的矩阵XY轴编号和XY轴
4 回答
如何添加计数?
1 回答
如何添加计数器函数?
10 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
9 回答
如何添加计数器来跟踪while循环中的月份和年份?
5 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
6 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
1 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
8 回答
如何添加评论拉梅尔亚姆
10 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
1 回答
如何添加谷歌地点自动完成到Flask?
10 回答
如何添加超时、python discord bot
5 回答
如何添加超过1dp的检查
5 回答
如何添加距离方法
2 回答
如何添加跟随游戏的敌人精灵
8 回答
如何添加路径以便python可以找到程序?
4 回答
如何添加身份验证/安全性以使用happybase访问HBase?
10 回答