2014-11-25 3 views
0

Я пытаюсь захватить все пути в текстовом файле, разделив строку на массив и слово с помощью «/ java», чтобы получить пути.Как разбить строку в файле в ruby ​​

Вот мой код:

logfile = "/home/weblogic/javaapp.txt" 
log = Facter::Util::FileRead.read(logfile) 
log.each_line do |line| 
unless log.nil? 
log.each_line do |line| 
    val = line.split(/ /) 
    java_path = val.grep(%r!/java!) 
    java_count += 1 
Facter.add("java_known_weblogic_version#{java_count}") do 
setcode do 
    java_path 
end 
end 

Вот мой текстовый файл:

 
/u01/java/jdk1.7.0_72/jre/bin/java 
/u01/java/jdk1.7.0_72/bin/java 
/u01/java/jdk1.7.0_65/jre/bin/java 
/u01/java/jdk1.7.0_65/bin/java 

факты возвращаются, как это:

java_known_weblogic_version1 ["/u01/java/jdk1.7.0_72/jre/bin/java\n"] 
java_known_weblogic_version10 [] 
java_known_weblogic_version11 [] 
java_known_weblogic_version12 [] 
java_known_weblogic_version13 ["/u01/java/jdk1.7.0_65/bin/java\n"] 
java_known_weblogic_version14 [] 
java_known_weblogic_version15 [] 

Как устранить [] и вернуть только путь, например «/u01/java/jdk1.7.0_65/bin/java»?

+0

Пара вопросов. Узнайте, как правильно отформатировать вопрос. Stack Overflow предоставляет [очень полезную помощь] (http://stackoverflow.com/editing-help) для этого, поэтому пройдите через него и ознакомьтесь с техникой. Кроме того, вам не нужно просить о помощи; Stack Overflow - это сайт добровольцев, которые здесь, чтобы попытаться помочь, так что это ожидание. –

+0

Ваш пример кода недействителен. Пожалуйста, исправьте это. Нам не нужно синтаксически корректировать ваш код. –

ответ

1

Array#grep возвращает массив. Вы можете join его в строку:

java_path = val.grep(%r!/java!).join(',') 

Чтобы избавиться от \n на концах строк:

java_path = val.grep(%r!/java!).map(&:chomp).join 

Надеется, что это помогает.

+0

спасибо. Это сработало для меня – suppala

0

Другой способ посмотреть, что val возвращается как массив, который разбивается на основе определяемого вами символа (//в вашем случае). Если вы хотите проверить значение в каждой позиции в массиве, то лучшим выбором будет вызов .each для каждого элемента в массиве, а затем манипулирование элементами, которые соответствуют.

val = line.split(/ /) 
val.each do |element| 
    java_path = element.match(%r!/java!) 
    java_count += 1 
    Facter.add("java_known_weblogic_version#{java_count}") do 
     setcode do 
      java_path 
     end 
    end 
end 
+0

привет, когда я пробую ваш код. I ma с этой ошибкой не определен метод 'grep 'для" /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/java":String – suppala