繁体   English   中英

如何将gsub应用于数组中的字符串元素?

[英]how to apply gsub on string elements within an array?

例如,我有一个结构如下的数组:

my_array = [["..\\..\\..\\Source\\file1.c"], ["..\\..\\..\\Source\\file2.c"]]

该数组由以下代码生成:

File.open(file_name) do |f|
    f.each_line {|line|
      if line =~ /<ClCompile Include="..\\/
        my_array << line.scan(/".*.c"/)
      end
    }
  end

在稍后的代码中,我正在处理数组:

my_array .each {|n| f.puts n.gsub(/\\/,"//")}

如您所见,想用数组中元素上的正斜杠替换所有反斜杠。 元素提供了源文件的路径。 最后,我将在另一个文件中输出这些路径。

我收到此错误:

undefined method `gsub' for [["..\\..\\..\\Source\\file1.c"], ["..\\..\\..\\Source\\file2.c"]]:Array (NoMethodError)

任何想法?

您有一个数组数组,因此,如果要保持这样的数组,则需要有2个循环。

否则,如果将变量更改为此: my_array = ["..\\\\..\\\\..\\\\Source\\\\file1.c", "..\\\\..\\\\..\\\\Source\\\\file2.c"]您的代码应该可以正常工作。


UPDATE

如果您无法控制my_array ,并且它始终是一个单项数组的数组,也许这是最干净的:

my_array.flatten.each {|n| puts n.gsub(/\\/,"//")}

它所做的是将二维数组转换为一维。

my_array.flatten.each { |n| f.puts n.tr('\\', '/') }

正如其他人指出的那样,您是在数组上而不是其中的字符串调用gsub。 你要:

my_array.each {|n| puts n[0].gsub(/\\/,"//")}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM