在某些文本中,我有一系列不同长度(从1到6位数不等).我想通过用零填充较短的数字来均衡所有这些数字的长度.
例如以下4行 -
A1:11
A2:112
A3:223333
A4:1333
A5:19333
A6:4
Run Code Online (Sandbox Code Playgroud)
应该成为填充整数
A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004
Run Code Online (Sandbox Code Playgroud)
我正在使用"sed"和以下的精简表达式:
sed -e 's/:\([0-9]\{1\}\)\>/:00000\1/' \
-e 's/:\([0-9]\{2\}\)\>/:0000\1/' \
-e 's/:\([0-9]\{3\}\)\>/:000\1/' \
-e 's/:\([0-9]\{4\}\)\>/:00\1/' \
-e 's/:\([0-9]\{5\}\)\>/:0\1/'
Run Code Online (Sandbox Code Playgroud)
是否有可能以比这更好的表达方式做到这一点?
C++ 是否支持允许我们将对象及其所有填充字段初始化为零的语言构造。我在 cppreference.com 中发现了一些关于零初始化的令人鼓舞的措辞,表明在某些情况下,填充字节也将被清零。
引用自 cppreference.com: 零初始化
零初始化在以下情况下进行:
- 作为非类类型和没有构造函数的值初始化类类型的成员的值初始化序列的一部分,包括未提供初始化程序的聚合元素的值初始化。
零初始化的效果是:
- 如果 T 是标量类型,则对象的初始值是显式转换为 T 的整数常量零。
- 如果 T 是非联合类类型,则所有基类和非静态数据成员都初始化为零,并且所有填充都初始化为零位。构造函数(如果有)将被忽略。
- ...
人们会在value-initialization、aggregate-initialization和list-initialization中找到对零初始化的引用。
我使用相当最新的 GCC 和 clang C++ 编译器进行了测试,它们的行为似乎有所不同。
坦率地说,我努力解析这些规则,特别是考虑到不同的编译器行为,我无法弄清楚如何正确解释这些规则。
请参阅此处的代码(至少需要 C++11)。结果如下:
给出: Foo
struct Foo
{
char x;
int y;
char z;
};
Run Code Online (Sandbox Code Playgroud)
| 构造 | 克++ | 铿锵++ |
|---|---|---|
| 富() | x:[----][0x42][0x43][0x44],v: 0 |
x:[----][----][----][----],v: 0 |
y:[----][----][----][----],v: 0 |
y:[----][----][----][----],v: 0 |
|
z:[----][0x4A][0x4B][0x4C],v: 0 |
z:[----][----][----][----],v: 0 |
|
| 富{} | x:[----][----][----][----],v: 0 |
x:[----][0x42][0x43][0x44],v: 0 |
y:[----][----][----][----],v: 0 |
y:[----][----][----][----],v: 0 |
|
z:[----][----][----][----],v: 0 |
z:[----][0x4A][0x4B][0x4C],v: 0 |
这里[----] …
我想在安装之前使用automake来处理/修改二进制文件.例如,我想将二进制文件中的符号提取到一个单独的文件和位置(如下所示).另一个例子是收集md5sums的关键资产以发布报告.
这是一个简化的(但有代表性的)Makefile.am,我有:
abc_PROGRAMS = foo
foo_SOURCES = foo.cpp
pqr_PROGRAMS = bar
bar_SOURCES = bar.cpp
ALL_SYMS := $(PROGRAMS:%=%.sym)
sym_DATA = $(ALL_SYMS)
# A convenient target such as "make foo.sym" will trigger this rule:
$(ALL_SYMS): %.sym : %
...
objcopy --preserve-dates --only-keep-debug $< $@
objcopy --preserve-dates --strip-all --add-gnu-debuglink=$@ $<
...
Run Code Online (Sandbox Code Playgroud)
我在安装过程中尝试了几种方法来挂钩我的脚本,但成功有限.
一种可能的方法是使用install-exec-local:
install-exec-local: $(ALL_SYMS)
Run Code Online (Sandbox Code Playgroud)
install-exec-local的问题是,当我使用:"make install -j"时,install-exec-local目标与安装并行运行,因此二进制文件foo和bar安装到各自的目标dirs,甚至当他们正在被%.sym规则修改时,从而可能会破坏已安装的文件.但是,如果不使用-j,则此解决方案有效.我想如果我可以利用使用-j的优点.
另一种可能的方法是使用install-exec-hook:
install-exec-hook: $(ALL_SYMS)
Run Code Online (Sandbox Code Playgroud)
install-exec-hook的问题是在我有机会使用%.sym规则修改它们之前已经安装了程序foo和bar.除了foo和bar安装在不同的位置,我没有一个通用的方法来获取他们的目标位置,同时编写一个合适的install-exec-hook规则.
另一种可能的方法是定义STRIP_PROGRAM或类似的东西,但这不能很好地工作,因为我认为它不适用于"make install"目标,而只能使用"make install-strip -j".我没有走这条路,因为我们的构建脚本使用"make install -j".
另一种方法是通过创建在构建时间而不是安装时间运行的构建规则来实现.但是这个真的很麻烦,它在build目录中创建了很多文件,我想避免它.此外,项目中的新人在添加新程序时可以轻松绕过这些精心调整的精心安排.
abc_PROGRAMS = foo
foo : foo.tmp
foo.sym : foo
noinst_PROGRAMS = foo.tmp …Run Code Online (Sandbox Code Playgroud)我的Google电子表格包含以下数据
A B D
1 Date Weight Computation
2 2015/12/09 =B2*2
3 2015/12/10 65 =B3*2
4 2015/12/11 =B4*2
5 2015/12/12 =B5*2
6 2015/12/14 62 =B6*2
7 2015/12/15 =B7*2
8 2015/12/16 61 =B8*2
9 2015/12/17 =B9*2
Run Code Online (Sandbox Code Playgroud)
我想绘制权重日期,和/或将其用于计算其他重量的数量的其他列.但是你会注意到有一些缺失的条目.我想要的是另一列,其数据基于权重列,内插和填充缺失值.例如:
A B C D
1 Date Weight WeightI Computation
2 2015/12/09 65 =C2*2 # use first known value
3 2015/12/10 65 65 =C3*2
4 2015/12/11 64 =C4*2 # =(62-65)/3*(1)+65
5 2015/12/12 63 =C5*2 # =(62-65)/3*(2)+65
6 2015/12/14 62 62 =C6*2
7 2015/12/15 61.5 =C7*2 …Run Code Online (Sandbox Code Playgroud) 简介: 你好。我正在为我的用例探索 python rxpy库 - 我正在使用反应式编程概念构建执行管道。这样我希望我就不必操纵太多的状态。虽然我的解决方案似乎有效,但我在尝试从其他 Observable 组合一个新的 Observable 时遇到了麻烦。
问题是我编写可观察值的方式导致一些昂贵的计算重复两次。为了性能,我真的想防止触发昂贵的计算。
我对反应式编程很陌生。试图挠头并浏览互联网资源和参考文档 - 对我来说似乎有点太简洁了。请指教。
以下是一个玩具示例,说明了我正在做的事情:
import rx
from rx import operators as op
from rx.subject import Subject
root = Subject()
foo = root.pipe(
op.map( lambda x : x + 1 ),
op.do_action(lambda r: print("foo(x) = %s (expensive)" % str(r)))
)
bar_foo = foo.pipe(
op.map( lambda x : x * 2 ),
op.do_action(lambda r: print("bar(foo(x)) = %s" % str(r)))
)
bar_foo.pipe(
op.zip(foo),
op.map(lambda i: i[0]+i[1]),
op.do_action(lambda r: print("foo(x) + bar(foo(x)) …Run Code Online (Sandbox Code Playgroud)