Tôi nghĩ bạn không thể làm điều đó một cách an toàn do giới hạn hệ thống tệp.
Nếu bạn thực sự muốn thực hiện chỉnh sửa tại chỗ, bạn có thể thử ghi vào bộ nhớ, chỉnh sửa và sau đó thay thế tệp cũ. Nhưng hãy cẩn thận rằng có ít nhất hai vấn đề với cách tiếp cận này. Đầu tiên, nếu chương trình của bạn dừng ở giữa viết lại, bạn sẽ nhận được một tệp không đầy đủ. Thứ hai, nếu tệp của bạn quá lớn, nó sẽ ăn bộ nhớ của bạn.
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
cái gì đó dọc đường đó sẽ làm việc, nhưng sử dụng một tập tin tạm thời là một an toàn hơn nhiều và các cách tiếp cận tiêu chuẩn
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)
tình trạng của bạn có thể là bất cứ điều gì cho thấy nó là dòng không mong muốn, như, file_lines += line unless line.chomp == "aaab"
ví dụ: sẽ xóa dòng "aaab".
phải được đặt tại chỗ? – tokland
ý của bạn là "inplace"? – bugerrorbug
Bạn có thể sửa đổi tệp hiện có (đó là bản cập nhật tại chỗ) hoặc tạo tệp mới. Cách tiếp cận cuối cùng này thường được ưu tiên vì nó không phá hủy. Kiểm tra ví dụ 'sed' có hoặc không có tùy chọn' -i'. – tokland