Я почти рубиновый nOOb (имею только знание Ruby для написания базового шаблона .erb или пользовательских фактов Puppet). Похоже, мои требования довольно просты, но я не могу окунуться в это.читать файл в массив, исключая прокомментированные строки
Пытается написать шаблон .erb
, где он считывает файл (с разделительными линиями) в массив и затем обрабатывает каждый элемент массива в соответствии с требованиями. Это то, что я до сих пор:
fname = "webURI.txt"
def myArray()
#if defined? $fname
if File.exist?($fname) and File.file?($fname)
IO.readlines($fname)
end
end
myArray.each_index do |i|
myLine = myArray[i].split(' ')
puts myLine[0] +"\t=> "+ myLine.last
end
Который работает просто отлично, за исключением (по понятным причинам) для линии, которая закомментированная или пустых строк. Я также хочу удостовериться, что когда spitted (по пространству) вверх, линия не должна содержать более двух полей; файл, как это:
# This is a COMMENT
#
# Puppet dashboard
puppet controller-all-local.example.co.uk:80
# Nagios monitoring
nagios controller-all-local.example.co.uk::80/nagios
tac talend-tac-local.example.co.uk:8080/org.talend.admin
mng console talend-mca-local.example.co.uk:8080/amc # Line with three fields
Таким образом, в основном эти две вещи, которые я хотел бы достичь:
- Прочитайте строки в массив, вырезают все после первого
#
- Сплит каждый элемент и распечатать сообщение, если идентификатор номера более двух
Любая помощь была бы принята с благодарностью. Ура !!
Update 25/02
Спасибо парень за вашу помощь !!
blank
вещь вообще не работает; бросая эту ошибку; но я почему-то не понял, почему:
неопределенный метод `blank? ' для "\ п": String (NoMethodError)
Массив: myArray
, который я получаю на самом деле что-то вроде этого (с использованием p
вместо puts
:
["\n", "puppet controller-all-local.example.co.uk:80\n", "\n", "\n", "nagios controller-all-local.example.co.uk::80/nagios\n", ..... \n"]
Таким образом, я должен был сделать это обойти эту вероят:
$fname = "webURI.txt"
def myArray()
if File.exist?($fname) and File.file?($fname)
IO.readlines($fname).map { |arr| arr.gsub(/#.*/,'') }
end
end
# remove blank lines
SSS = myArray.reject { |ln| ln.start_with?("\n") }
SSS.each_index do |i|
myLine = SSS[i].split(' ')
if myLine.length > 2
puts "Too many arguments!!!"
elsif myLine.length == 1
puts "page"+ i.to_s + "\t=> " + myLine[0]
else
puts myLine[0] +"\t=> "+ myLine.last
end
end
Вы только приветствовать, чтобы улучшить код ура !!
.
Вы можете добавить '.reject (& пустой?)', Чтобы удалить пустые строки тоже. – gmaliar
Спасибо, парень!Кроме того, как я могу удалить все вещи из первого '#' для обработки встроенного комментария '(например, ABC Bcd # в строке комментария)'? ура !! – MacUsers
Отредактировал свой ответ. – gmaliar