1

在我的编程环境中,我有相当大的二维数组。它的尺寸是 90x40。

我必须通过从外部文件加载数据来填充这个数组。

加载数据的机制由一个绑定文件组成,我必须在其中进行如下样式的绑定:

Array[0][0] =
Array[0][1] =
Array[0][2] =
...
Array[20][37] = 
Array[20][38] =
...
Array[89][38] =
Array[89][39] =

很容易计算出我必须创建 3600 条部分唯一的线。

我认为我可以在 gVim 中创建 [..][..] 元素,然后在它们前面添加数组的名称。虽然添加前缀很容易,但我坚持创建 [..][..] 位。

在我的场景中,我想通过执行以下操作来解决这个问题:

  1. 创建 3600 行
  2. 在每行/行的末尾(通过使用:%s/$/\[ -- my expression 1 -- \]/g命令)添加从 0 到 89 的数字,以四十个元素(四十个零、四十个、四十二个等)为块
  3. 在每行/行的末尾(通过使用:%s/$/\[ -- my expression 2-- \]/g命令)添加从 0 到 39 的数字,以 40 个元素为一组(零、一、二、...、三十九、零、一、...等)。 )

我的表达式 1将计算为操作的商(number of line) mod 90

我的表达式 2将评估为操作提醒(number of line) mod 40

现在的问题是:

  1. 如何评价(number of line)
  2. 如何计算(number of line) mod XX表达式?
  3. 也许有更好的方法?
4

2 回答 2

3

如果您不想使用正则表达式,请在命令模式下尝试以下操作:

for i in range(0, 89) | for j in range(0, 39) | put = 'Array['.i.']['.j.'] =' | endfor | endfor
于 2014-05-21T08:16:45.670 回答
2

VIM 宏是一个更好的解决方案。Array[0][0]您应该在第一行写入,使用 开始录制宏qq,然后yyp(复制和粘贴行)2f[l将光标放在第二个数组索引上,按<C-a>将光标下的数字加 1,然后q停止录制。完成此操作后,只需点击38@q重复宏 38 次即可构建完整列表。

然后再次开始录制宏,qq然后39k向上移动 39 行并V39jy39jp选择、复制和粘贴 39 行,然后0f[l到达第一个数组索引<C-v>39j以阻止选择第一个索引<C-a>以将其递增 1 并q结束录制。现在点击88@q重复最后一步 88 次以获得所需的输出。

注意:宏的执行,尤其是最后一个88@q,需要一些时间,所以你必须耐心等待。

然而,为了完整起见,我想提一下表达式 1 是如何完成的。:%s/$/\=(line('.') - 1) % 90同样对于表达式 2

于 2014-05-21T02:22:37.907 回答