[RUBY-ON-RAILS] 루비 텍스트 파일의 중간에 데이터의 줄을 제거하려면 어떻게
RUBY-ON-RAILS루비 텍스트 파일의 중간에 데이터의 줄을 제거하려면 어떻게
나는 파일에 쓰기 및 파일에서 읽는 방법을 알고,하지만 난, 전체 파일을 메모리로 읽어을 조작하고, 전체 파일을 다시 작성 외에 파일을 수정하는 방법을 모르겠어요. 큰 파일의 경우이 매우 생산하지 않습니다.
정말 APPEND 및 쓰기의 차이를 모른다.
EG
나는이 포함 된 파일이있는 경우 :
Person1,will,23
Person2,Richard,32
Person3,Mike,44
어떻게하여 Person2가 포함 된 삭제 라인에 수 만 있을까?
해결법
-
==============================
1.당신은 여러 가지 방법으로 라인을 삭제할 수 있습니다 :
당신은 여러 가지 방법으로 라인을 삭제할 수 있습니다 :
-
==============================
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.당신은 당신이 새 파일로 유지하려는 라인을 추가, 파일을 열고 그것을 선으로 줄을 읽을 수 있습니다. 이렇게하면 라인이 원본 파일을 파괴하지 않고, 유지되는 동안 대부분의 제어 할 수 있습니다.
당신은 당신이 새 파일로 유지하려는 라인을 추가, 파일을 열고 그것을 선으로 줄을 읽을 수 있습니다. 이렇게하면 라인이 원본 파일을 파괴하지 않고, 유지되는 동안 대부분의 제어 할 수 있습니다.
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.여기에 읽기 :
여기에 읽기 :
File.open('output.txt', 'w') do |out_file| File.open('input.txt', 'r').each do |line| out_file.print line.sub('Person2', '') end end
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
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 분할 오류는 RVM와 맥 OSX에 레일 (0) | 2020.03.04 |
---|---|
[RUBY-ON-RAILS] 같은 페이지에 여러 개의 비 중첩 모델 생성 (0) | 2020.03.04 |
[RUBY-ON-RAILS] 왜 Heroku가 Windows에서 내 Gemfile.lock을 허용하지 않습니다? (0) | 2020.03.04 |
[RUBY-ON-RAILS] 레일의 기본 날짜 형식은 (는 DDMMYYYY 할 필요) (0) | 2020.03.04 |
[RUBY-ON-RAILS] 루비에없는 날짜와 시간을 나타냅니다 (0) | 2020.03.04 |