2013-07-14 2 views
5

텍스트 파일에서 특정 줄을 어떻게 하나씩 삭제할 수 있습니까? 예를 들어 세 번째 줄 또는 다른 줄. 나는 이것을 시도했다 :텍스트 파일에서 특정 라인을 삭제 하시겠습니까?

line = 2 
file = File.open(filename, 'r+') 
file.each { last_line = file.pos unless file.eof? } 
file.seek(last_line, IO::SEEK_SET) 
file.close 

불행히도, 그것은 아무것도하지 않는다. 나는 다른 많은 솔루션을 시도했지만 아무 것도 작동하지 않습니다.

+0

이 삽입되어 있어야합니까? – tokland

+0

"inplace"의 의미는 무엇입니까? – bugerrorbug

+1

기존 파일 (현재 위치 업데이트)을 수정하거나 새 파일을 만들 수 있습니다. 이 마지막 접근 방식은 일반적으로 비파괴적인 방식으로 선호됩니다. '-i' 옵션을 사용하거나 사용하지 않고'sed'를 확인하십시오. – tokland

답변

8

난 당신 때문에 파일 시스템의 한계를 안전하게 그렇게 할 수 있다고 생각합니다.

실제 편집을 원할 경우 메모리에 쓰고 편집 한 다음 이전 파일을 바꿀 수 있습니다. 그러나이 접근 방식에는 적어도 두 가지 문제가 있음에 유의하십시오. 첫째, 프로그램을 다시 작성하는 도중에 중지하면 불완전한 파일이 생성됩니다. 둘째, 파일이 너무 크면 메모리를 먹게됩니다. 그 라인을 따라

file_lines = '' 

IO.readlines(your_file).each do |line| 
    file_lines += line unless <put here your condition for removing the line> 
end 

<extra string manipulation to file_lines if you wanted> 

File.open(your_file, 'w') do |file| 
    file.puts file_lines 
end 

뭔가 작동하지만 임시 파일을 사용하는 것이 훨씬 안전하고 표준 접근 방식

이 같은 원치 않는 선이었다 보였다

귀하의 조건이 될 수 아무것도

require 'fileutils' 

File.open(output_file, "w") do |out_file| 
    File.foreach(input_file) do |line| 
    out_file.puts line unless <put here your condition for removing the line> 
    end 
end 

FileUtils.mv(output_file, input_file) 
, file_lines += line unless line.chomp == "aaab"입니다한다 예를 들어, "aaab"행을 제거합니다.

+0

두들 스를 일해 주셔서 감사하지만, 귀하의 솔루션은 작동하지 않습니다. 그것은 내게 오류를 준다 "... 정의되지 않은 메서드 'line_to_remove?' for main : Object ... "때문에"? ". 왠지 말해줘? – bugerrorbug

+0

죄송합니다, line_to_remove? 이완을위한 조건으로 생각 되었으니, 그에 따라 대답을 업데이트 할 것입니다. – Doodad

+0

고마워요! 귀하의 솔루션은 정말 나를 도왔습니다! 다시 한 번 감사드립니다! – bugerrorbug

-2
file.each do |line| 
    if should_be_deleted(line) 
    f.seek(-line.length, IO::SEEK_CUR) 
    f.write(' ' * (line.length - 1)) 
    f.write("\n") 
    end 
end 
file.close 

File.new(filename).each {|line| p line } 
+0

귀하의 솔루션을 이해하지 못하겠습니까? 설명해 주시겠습니까? – bugerrorbug

+0

내 업데이트 사례를 제공 할 수 있습니까? – bugerrorbug

+1

그것의 http://stackoverflow.com/a/16638778/170881 –

관련 문제