小编Sta*_*tan的帖子

将二进制文件读入vector <char>读取少于完整文件

我有二进制文件,其内容我试图读入一个向量.所有文件都是相同的大小,但使用下面的代码,最终的矢量大小总是比文件大小小一点,并且它与文件不同(但每个文件都相同).我对这里发生的事感到困惑......

#include <fstream>
#include <vector>
#include <iostream>
#include <iterator>
int main(int argc, char *argv[]) {
  std::string filename(argv[1]);

  // Get file size
  std::ifstream ifs(filename, std::ios::binary | std::ios::ate);
  int size = (int)ifs.tellg();
  std::cout << "Detected " << filename << " size: " << size << std::endl; // seems correct!

  // Load file
  ifs.seekg(0, std::ios::beg);
  std::istream_iterator<char unsigned> start(ifs), end;
  std::vector<char unsigned> v;
  v.reserve(size);
  v.assign(start, end);

  std::cout << "Loaded data from " << filename << ", with " << v.size() << " elements" << …
Run Code Online (Sandbox Code Playgroud)

c++ vector ifstream

11
推荐指数
1
解决办法
879
查看次数

在两个data.tables中添加值

我有两个data.tables,一个有另一个的行/列子集.我想将较小的data.table的值添加到较大的值的值:

DT1 <- as.data.table(matrix(c(0, 1, 2, 3), nrow=2, ncol=2, 
       dimnames=list(c("a", "b"), c("a", "b"))), keep=T)
DT2 <- as.data.table(matrix(c(0, 0, 1, 2, 2, 1, 1, 0, 3), nrow=3, ncol=3, 
       dimnames=list(c("a", "b", "c"), c("a", "b", "c"))), keep=T)

DT1
#   rn a b
#1:  a 0 2
#2:  b 1 3
DT2
#   rn a b c
#1:  a 0 2 1
#2:  b 0 2 0
#3:  c 1 1 3
Run Code Online (Sandbox Code Playgroud)

我想将DT1添加到DT2,以便我得到

#   rn a b c
#1:  a 0 4 1
#2: …
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
2
解决办法
223
查看次数

ctags regex用于一行中的多个声明

我正在为自定义语言编写.ctags文件...与大多数语言一样,它允许在一行中进行多个变量声明..即:

int a, b, c;
Run Code Online (Sandbox Code Playgroud)

我有一个基本的正则表达式,它识别'a':

--regex-mylang=/^[ \t]*int[ \t]*([a-zA-Z_0-9]+)/\1/v,variable/
Run Code Online (Sandbox Code Playgroud)

如何修改它以使其与'b'和'c'匹配?我在ctags文档中找不到任何可以在一行中处理多个匹配的内容.

ctags exuberant-ctags

6
推荐指数
2
解决办法
1997
查看次数

从 git 中的结帐后挂钩设置环境变量

我有一个工作环境,我经常在其中构建二进制文件,然后使用该二进制文件启动长时间运行的进程。当这些正在运行时,我想切换到另一个 git 分支并在那里做一些工作,并可能构建一些不会覆盖当前运行的新二进制文件。

现在,构建和运行脚本使用$OUT_DIRenv 变量来确定二进制文件的输出目录。理想情况下,我希望$OUT_DIR特定于分支以避免上述构建相互覆盖的问题。
起初,这对于 post-checkout 钩子来说似乎是一项简单的工作——设置OUT_DIROUT_DIR_BASE + "/" + current branch... 除了 post-checkout 钩子在子 shell 中运行,所以它不能设置父环境变量。

有什么聪明的方法可以解决这个问题吗?

我考虑过的一些想法:

  • 我可以将“ export OUT_DIR...”命令输出到一个文件,并让用户获取它——这很烦人,人们会忘记这样做。
  • 我可以将新OUT_DIR文件写入.rc 文件并让构建/运行脚本从那里获取它,但这需要更改构建环境,并且用户体验会变得更糟(即您不能执行“ cd $OUT_DIR”来进入输出目录...
  • 我可以为 ' git checkout'编写一个包装器,它会OUT_DIR适当地打开一个带有set的新外壳......但这是“泄漏”的外壳,随着时间的推移,我会运行相当多的外壳。

这些看起来都不是很好,因为感觉应该是一个简单的解决方案。

git shell environment-variables

5
推荐指数
1
解决办法
969
查看次数

找到第二个数据帧中每个元素的两个数据帧之间的最小距离

我有两个数据框ev1和ev2,描述了在许多测试中收集的两种类型事件的时间戳.因此,每个数据帧都有"test_id"和"timestamp"列.我需要找到的是在同一测试中每个ev2的最小距离ev1.

我有一个工作代码合并两个数据集,计算距离,然后使用dplyr过滤最小距离:

ev1 = data.frame(test_id = c(0, 0, 0, 1, 1, 1), time=c(1, 2, 3, 2, 3, 4))
ev2 = data.frame(test_id = c(0, 0, 0, 1, 1, 1), time=c(6, 1, 8, 4, 5, 11))

data <- merge(ev2, ev1, by=c("test_id"), suffixes=c(".ev2", ".ev1"))

data$distance <- data$time.ev2 - data$time.ev1

min_data <- data %>%
  group_by(test_id, time.ev2) %>%
  filter(abs(distance) == min(abs(distance)))
Run Code Online (Sandbox Code Playgroud)

虽然这很有效,但合并部分非常慢并且感觉效率低下 - 我正在为同一个test_id生成一个包含ev2-> ev1的所有组合的巨大表格,只是将其过滤为一个.在合并期间,似乎应该有一种"即时过滤"的方法.在那儿?

更新:当使用akrun概述的data.table方法时,以下两个"group by"列的情况会失败:

ev1 = data.frame(test_id = c(0, 0, 0, 1, 1, 1), time=c(1, 2, 3, 2, 3, 4), group_id=c(0, …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr

5
推荐指数
1
解决办法
1157
查看次数

ANTLR4解析规则以匹配打开/关闭括号

我正在解析一种语言,该语言的语句为“ code”,后跟“ {”,后跟一堆我对解析不感兴趣的代码,后跟“}”。理想情况下,我希望规则如下:

skip_code: 'code' '{' ~['}']* '}'

..可以简单地跳到右花括号。问题在于被跳过的代码本身可能具有成对的花括号。因此,我本质上需要做的是运行一个计数器,并在每个“ {”上递增,并在每个“}”上递减,并在计数器回到0时结束解析规则。

ANTLR4中执行此操作的最佳方法是什么?当检测到“代码”时,我应该跳到自定义函数并吞下标记并运行计数器吗?还是有一些优雅的方法可以在语法本身中表达出来?

编辑:一些示例代码,根据要求:

class foo;
  int m_bar;
  function foo_bar;
     print("hello world");
  endfunction
  code {
     // This is some C code
     void my_c_func() {
        printf("I have curly braces {} in a string!");
     }
  }
  function back_to_parsed_code;
  endfunction
endclass
Run Code Online (Sandbox Code Playgroud)

antlr4

5
推荐指数
1
解决办法
1870
查看次数

规范化每行data.table

这似乎应该很容易,但我找不到答案:(.我正在尝试规范化data_table的每一行,如下所示:

normalize <- function(x) {
  s = sum(x)
  if (s>0) {
    return(x/s)
  } else {
    return 0
  }
}
Run Code Online (Sandbox Code Playgroud)

如何在data.table的每一行上调用此函数并获取规范化的data.table?我可以做一个for循环,但这肯定不是正确的方法,并且apply(data, 1, normalize),据我所知,将我的data.table转换为一个性能很大的矩阵.

performance r normalization data.table

4
推荐指数
1
解决办法
2672
查看次数

根据另一个data.table值递增data.table值

我有两个data.tables,一个有另一个的行/列子集.对于较小的表中的每个非零值,我想将较大的data.table的值递增1:

DT1 <- as.data.table(matrix(c(0, 1, 2, 3), nrow=2, ncol=2, 
       dimnames=list(c("a", "b"), c("a", "b"))), keep=T)
DT2 <- as.data.table(matrix(c(0, 0, 1, 2, 2, 1, 1, 0, 3), nrow=3, ncol=3, 
       dimnames=list(c("a", "b", "c"), c("a", "b", "c"))), keep=T)

DT1
#   rn a b
#1:  a 0 2
#2:  b 1 3
DT2
#   rn a b c
#1:  a 0 2 1
#2:  b 0 2 0
#3:  c 1 1 3
Run Code Online (Sandbox Code Playgroud)

我想在DT2中增加值,以便我得到

#   rn a b c
#1:  a 0 3 1
#2: …
Run Code Online (Sandbox Code Playgroud)

r data.table

1
推荐指数
1
解决办法
362
查看次数