2017-02-16 1 views
0

저는 Ruby 세계에 처음 왔으므로 간단한 쿼리 만 쓰면 좋습니다.루비에있는 모든 파일의 내용을 반복하고 인쇄하십시오.

내 과제 중 하나는 폴더의 모든 텍스트 파일 (최상위 수준)의 내용을 읽고 파일 내용을 추가 또는 병합 된 방식으로 단일 출력 파일로 리디렉션하려고합니다. 나는 아래의 스크립트를 작성하는 관리

File Name: 1st file name 

all its contents 
==================================== 
File Name: 2nd file name 

all its contents 
==================================== 
File Name: 3rd file name 

all its contents 
==================================== 
    .... 
    .... 


==================================== 

출력 파일 만 출력 파일이 비어 :

가 나는 형식 아래와 같이 기대하고있다. 어떤 제안을하시기 바랍니다.

File.open('C:\Users\darkop\Desktop\final_output.txt','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    for file in @files 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name:"#{file} 
     puts 
     final << line 
     puts "=" * 20 
     end 
    end 
end 

또한 위에서 언급 한 형식의 출력을 텍스트 파일 대신 워드 문서로 리디렉션 할 수 있습니까?

감사합니다.

+0

"시도"및 "예상 출력"을 질문에 포함 시켰습니다. 또한 "출력"또는 "오류"를 추가해야합니다. –

+0

@JagdeepSingh : 빈/빈 출력 파일이 나타납니다. Thnks. – Goku

답변

1

이렇게하면됩니다.

puts "File Name:"#{file}이 (가) 있기 때문에 파일 이름이 비어 있습니다. 이렇게하면 #{file}이 큰 따옴표 안에 들어 있지 않기 때문에 보간되지 않습니다.

또한 대신 puts을 사용 했으므로 파일 내용을 가져 오지 않았습니다. 원하는 내용입니다. 대신 for .. in 루프의

-EDIT-

루비를 처음 사용하기 때문에,이 each 루프를 사용하는 것이 좋습니다

File.open('C:\Users\darkop\Desktop\final_output.txt','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    for file in @files 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name: #{file}" 
     puts 
     puts line 
     final << line 
     puts "=" * 20 
    end 
    end 
end 

. 또한 Word 문서에 대해 .doc 확장명을 가진 출력 이름을 지정하면됩니다.

File.open('C:\Users\darkop\Desktop\final_output.doc','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    @files.each do |file| 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name: #{file}" 
     puts 
     puts line 
     final << line 
     puts "=" * 20 
    end 
    end 
end 
+0

Van Dijik : 내 실수를 식별하기 위해 +1. 위의 형식을 얻기 위해 추가 수정을했습니다 : 'File.open ('D : /output.doc', 'a') do | final | @files = Dir.glob : @files final.puts에서 파일 ("D./텍스트/* TXT") "파일 이름 : # {파일}" \t final.puts 텍스트 = File.open (파일, 'r'). read.sub (/ # $ /? \ z /, $ /) text.each_line do | line | 최종 << 라인 \t 끝 \t final.puts "="* 70 끝 end' 여기에 당신의 시간을 주셔서 감사합니다. – Goku

관련 문제