복붙노트

[RUBY-ON-RAILS] 루비 텍스트 파일의 중간에 데이터의 줄을 제거하려면 어떻게

RUBY-ON-RAILS

루비 텍스트 파일의 중간에 데이터의 줄을 제거하려면 어떻게

나는 파일에 쓰기 및 파일에서 읽는 방법을 알고,하지만 난, 전체 파일을 메모리로 읽어을 조작하고, 전체 파일을 다시 작성 외에 파일을 수정하는 방법을 모르겠어요. 큰 파일의 경우이 매우 생산하지 않습니다.

정말 APPEND 및 쓰기의 차이를 모른다.

EG

나는이 포함 된 파일이있는 경우 :

Person1,will,23
Person2,Richard,32
Person3,Mike,44

어떻게하여 Person2가 포함 된 삭제 라인에 수 만 있을까?

해결법

  1. ==============================

    1.당신은 여러 가지 방법으로 라인을 삭제할 수 있습니다 :

    당신은 여러 가지 방법으로 라인을 삭제할 수 있습니다 :

  2. ==============================

    2.파일의 일부분이 재 작성 필요로 제거, 디스크에 데이터의 연속 블록으로 기본적으로 저장되기 때문에 적어도 무슨 일이 뒤에 온다. 당신이 말한대로 - - 그것은 큰 파일에 특히 효율적되지 않습니다 그 본질 평균으로한다. 따라서이다 일반적으로 한계 파일에 대한 좋은 생각은 이러한 문제가 발생하지 않도록 크기.

    파일의 일부분이 재 작성 필요로 제거, 디스크에 데이터의 연속 블록으로 기본적으로 저장되기 때문에 적어도 무슨 일이 뒤에 온다. 당신이 말한대로 - - 그것은 큰 파일에 특히 효율적되지 않습니다 그 본질 평균으로한다. 따라서이다 일반적으로 한계 파일에 대한 좋은 생각은 이러한 문제가 발생하지 않도록 크기.

    몇 가지 "타협"솔루션은 첫 번째 교체가 이동 한 후 두 번째 파일에 라인으로 라인을 통해 파일을 복사 할 수 있습니다. 이 메모리에 파일을로드 피할 수 있지만, 하드 디스크 액세스를 방지하지 않습니다

    require 'fileutils'
    
    open('file.txt', 'r') do |f|
      open('file.txt.tmp', 'w') do |f2|
        f.each_line do |line|
           f2.write(line) unless line.start_with? "Person2"
        end
      end
    end
    FileUtils.mv 'file.txt.tmp', 'file.txt'
    

    더욱 효율적으로 파일을 열고 삭제 한 다음 데이터 뒷면의 나머지를 이동하고자하는 위치로 넘어가 쓰기 읽기하는 것입니다 -하지만 일부 매우 추한 코드를 만들 것 (내가하라는 메시지가 표시 될 수 없습니다 ) 지금 그렇게.

  3. ==============================

    3.당신은 당신이 새 파일로 유지하려는 라인을 추가, 파일을 열고 그것을 선으로 줄을 읽을 수 있습니다. 이렇게하면 라인이 원본 파일을 파괴하지 않고, 유지되는 동안 대부분의 제어 할 수 있습니다.

    당신은 당신이 새 파일로 유지하려는 라인을 추가, 파일을 열고 그것을 선으로 줄을 읽을 수 있습니다. 이렇게하면 라인이 원본 파일을 파괴하지 않고, 유지되는 동안 대부분의 제어 할 수 있습니다.

    File.open('output_file_path', 'w') do |output| # 'w' for a new file, 'a' append to existing
      File.open('input_file_path', 'r') do |input|
        line = input.readline
        if keep_line(line) # logic here to determine if the line should be kept
          output.write(line)
        end
      end
    end
    

    당신이 시작하고 제거 할 청크의 끝의 위치를 ​​알고 있다면, 당신은 시작에 읽은 파일을 열 수 있습니다, 다음 끝까지 추구하고 계속 읽기.

    read 메소드에 매개 변수를 봐, 여기 추구에 대해 읽어 :

    http://ruby-doc.org/core-2.0/IO.html#method-i-read

  4. ==============================

    4.여기에 읽기 :

    여기에 읽기 :

    File.open('output.txt', 'w') do |out_file|
      File.open('input.txt', 'r').each do |line|
        out_file.print line.sub('Person2', '')
      end
    end
    
  5. from https://stackoverflow.com/questions/16638667/how-do-i-remove-lines-of-data-in-the-middle-of-a-text-file-with-ruby by cc-by-sa and MIT license