2013-02-24 3 views
2

저는 거의 루비 -nOOb입니다. (몇 가지 기본 .erb 템플릿이나 꼭두각시 사용자 정의 사실을 작성하는 데 Ruby에 대한 지식 만가집니다). 내 요구 사항은 매우 간단하지만 내 머리를 감당할 수는없는 것처럼 보입니다.주석 처리 된 행을 제외하고 배열로 파일을 읽어들입니다.

.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 

. 나는 또한 스페이스 (스페이스)로 뱉어 낼 때, 라인에 필드가 두 개 이상 있으면 안되는 지 확인하고 싶다. 이 같은 파일 : 그래서

# 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 

는, 기본적으로 내가 좋아하는 것이 두 가지를 달성하기 위해 :

  1. 배열로 라인을 읽고, 첫 #
  2. 분할 각 요소 후 모든 전원을 제거 숫자 2 이상인 경우 메시지를 인쇄하십시오.

어떤 도움을 주시면 감사하겠습니다. 건배!! 당신의 도움에 대한


업데이트 25/02

감사합니다 사람!

blank 것은 전혀 작동하지 않습니다. 이 오류가 발생했습니다. 그러나 나는 왜 그 이유를 이해하지 못했습니다 :

'blank?' "\ n을"에 대한 : 문자열 (NoMethodError)

가 배열 : myArray, 내가 얻을이 같은 (puts 대신 p를 사용하여 실제로 : 따라서

["\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 

당신은 코드를 개선 환호 가장 환영합니다!

답변

1
goodArray = myArray.reject do |line| 
    line.start_with?('#') || line.split(' ').length > 2 
end 

이렇게하면 #으로 시작하거나 split이 두 개 이상의 요소로 이루어진 배열을 반환합니다.이 배열은 좋은 항목 만의 배열을 반환합니다.

편집 : 인라인 들어

가`너무 빈 줄을 제거하는 (? & 빈)는 다음

goodArray.map do |line| 
    line.gsub(/#.*/, '') 
end 
+0

당신은'.reject을 추가 할 수 있습니다 할 수있는 코멘트. – gmaliar

+0

고마워요!또한 첫 번째'# '에서 모든 것을 제거하여 인라인 코멘트 (예 : Abc Bcd # 인라인 코멘트)를 처리하려면 어떻게해야합니까? 건배!! – MacUsers

+0

내 대답을 편집했습니다. – gmaliar

관련 문제