2011-03-03 8 views
0

그래서 저는 텍스트 파일을 개별 줄로 나눈 다음 구분 기호 문자를 기준으로 줄을 그룹화하는 루비 코드를 작성했습니다. 이 출력은 HTML에 텍스트 파일을 내보내는 메서드에 전달되는 배열에 기록됩니다. 다른 방법으로 gsub를 사용하여 HTML 텍스트 파일의 자리 표시자를 record 배열의 값으로 대체하려고 시도했을 때 문제가 발생하기 시작했습니다. Ruby는 계속 0 값을 전달한다고 말했습니다. 몇 시간 동안 프로그램의 일부분을 디버깅하려고 시도한 후에, 나는 다른 곳을보기로 결심했다. 프로그램의 수정 된 버전이 아래에 게시됩니다. 여기 Ruby : 배열의 모든 문자열 끝에 'nil'이있는 이유는 무엇입니까?

26188 
WHL 
1 
Delco 

B-7101 
A-63 
208-220/440 
3 
285 w/o pallet 
1495.00 

C:/img_converted/26188B.jpg 
EDM Machine Part 2 of 3 
AC Motor, 3/4 Hp, Frame 182, 1160 RPM 
|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| 

내가 함께 테스트를 봤는데 코드의 조각입니다 : 여기

는 입력 텍스트 파일의 샘플입니다

# function to import file as a string 

def file_as_string(filename) 
    data = '' 
    f = File.open(filename, "r") 
    f.each_line do |line| 
    data += line 
end 
return data 
end 

Dir.glob("single_listing.jma") do |filename| 
content = file_as_string(filename) 
content = content.gsub(/\t/, "\n") 
database_array = Array.new 
database_array = content.split("|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|") 
for i in database_array do 
    record = Array.new 
    record = i.split("\n") 
    puts record[0] 
    puts record[0].class  end 
end 

그 코드가 실행되면, I

[email protected]:~/code/ruby/idealm_db_parser$ ruby putsarray.rb 
26188 
String 
nil 
NilClass 

... record 각 배열 위치가 명백하게한다는 것을 의미한다 :이 출력을 얻을 유형 String 유형이 nil 인 데이터가 있습니다. 왜 이런거야?

+0

'file_as_string (fn)'은 단순히'File.read (fn)'일 수 있습니다. 'Array.new'라고하는 두 행을 모두 생략 할 수도 있습니다. – pilcrow

+0

아, 알았어. 감사. – eckza

답변

2

귀하의 database_array 크기가 예상보다 넓습니다.

스탠자 마커 |--|--|...|--| 뒤에 줄 바꿈이 있습니다. 그래서,이 같은 file_as_string 반환 뭔가 :

"26188\nWHL...|--|--|\n" 

다음 split() 끝 스탠자에 있습니다 이런 일에 : 당신은 다시 각 분할

["26188\nWHL...1160 RPM\n", "\n"] # <---- Note the last element here! 

하지만 "\n".split("\n")는 하늘의 배열을 제공, 첫 번째 요소는 nil으로 되돌아갑니다.

+0

알다시피, 나는 그 일과 관련이 있다는 느낌이 들었습니다. 빠른 수정이 모든 요소에서 반복되지만 마지막 요소에서 반복 할 수 있습니까? 내가 어떻게 그럴 수 있니? – eckza

+0

@kivetros : 빠른 수정은'record.empty? '를 확인하는 것입니다. – Chuck

+0

Better : 빠른 수정으로'if record [14]! = nil'을 검사하는 결과를 얻었습니다 ... – eckza

관련 문제