File io read/write to a file

本文探讨了在文件中替换特定字符的方法,介绍了直接替换存在的问题及替代方案,并讨论了不同方法的适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原本是想在以读写的方式打开一个文件,然后在此文件中查找相对应的字符并替换,起初偿试的是找到需要的字符后把文件的指针移动到此line的头位置,重写,然而重写的时候是replace而非insert,这样就导致了如果替换的字符小于或大于的时候,就会留下不能被替换掉。

f = File.open("/root/Desktop/test.txt","r+")


c=f.readline => # "test file replace" len=17
假若需要把test字符换成 hello world
那么先把
f.seek(-17,IO:SEEK_CUR) 把文件指针移到test字符的前面,
然后用f.write("hello world")
这时你会发现,"test file replace" 被替换成了"hello worldreplace"

替换字符失败,此方法不行


而另想了个方法:

这个方法实现的是把文件全部读出,读出的同时进行替换,暂时存储在一个变量中,最后把替换完的文件再重写入文件。

此方法对于小文件没问题,要是文件有上面百M的时候,就难以行通了。
tmpfile = []
File.open("#{RAILS_ROOT}/app/controllers/#{MOULD_TABLE_NAME}_controller.rb","r").readlines.each do |line|
re = Regexp.new(MOULD_CONTROLLER_NAME)
re_model = Regexp.new(MOULD_MODEL_NAME)
tmpfile << line.gsub(re,CHANNEL_CONTROLLER_NAME).gsub(re_model,CHANNEL_MODEL_NAME)
end #auto close file
f=File.open(("#{RAILS_ROOT}/app/controllers/#{MOULD_TABLE_NAME}_controller.rb","w+")
f.write(tmpfile)
f.close

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值