2010-04-26 43 views
0

我目前正试图弄清楚如何将索引范围作为一个字符串传递,但到目前为止一直没有任何运气。这里是什么,我试图做一个例子:传递指数范围

pos = %w{1 2..4} 
values = %{x cat} 
test_string = "This is a test with a string." 

test_string[pos[1]] = values[1] 

我知道我可以只把它分解与拆分或类似的东西,但我真的想知道如何直接通过这个值。我认为我可以用eval来完成它,但到目前为止,我一直没有运气。任何帮助将不胜感激,谢谢!

+0

如果您需要的语法工作,您的示例中预期的输出是什么? – 2010-04-26 18:19:28

+0

如果你解决了这个问题,那么删除这个问题或者至少在说明中记下这个问题。 – Tom 2011-03-20 05:23:56

回答

0

不知道为什么你会想这样做,这样一来,但是你可以这样做:

%Q{1 #{(2..4).to_a.join(' ')}}.split 

注意:如果your're试图操纵你想pos[0].chr测试字符串(数组从0开始和.chr将得到ASCII值)。

编辑:必须有更好的方法来实现你想要做的事情,给我们一些你需要的信息。像下面这样可能就足够了:

[1] + (2..4).to_a 

EDIT2:随着信息你给试试下面的出

pos = [15..22, 165..172] #array of ranges 
dates = %w{20100426 20100430} 
pos.each_with_index {|range, i| 
    test_string[range] = dates[i] 
} 
+0

我正在使用固定宽度的文件。每个职位所包含的信息都有一些固定的特征。我从配置文件中提取位置,并将它们对齐到同一索引位置的数组中,并将其替换为需要替换的位置。 – 2010-04-26 18:31:04

+0

你可以给我们一个瘦身的例子来处理,就像一个示例配置文件和替换文件,我想一堆gsubs可能会更好这个 – MatthewFord 2010-04-26 18:34:44

+0

不幸的是,配置文件包含我不能给出的信息。但是一个例子是,在固定宽度文件的每一行上都有许多年,总是处于相同的位置。我会做什么来更新配置文件的年份是将它们放入两个数组中,并用这种方式替换值。 例如。 position =%w {15..22 165..172} dates =%w {20100426 20100430} 我想这样做,所以我可以在不更改代码的情况下轻松更改配置文件中的特征。 – 2010-04-26 18:41:01

0

这里的问题是什么%被W¯¯转换为字符串原样是。在控制台中试一试,你会看到:

>> %w{1 2..4} 
=> ["1", "2..4"] 

它在转换它之前不扩展范围。

0

你在做什么,在这里?您尝试使用的索引是字符串,不是整数,因此无效。
如果你可以解释你打算去的地方,可能我们可以建议一条替代路线?