替换文件中的一行

时间:2010-09-15 10:40:06

标签: objective-c iphone-sdk-3.2

我有一个非常大的文本文件,我的iPad程序需要偶尔替换一行数据(换行符:'\ n')。我怎样才能有效地做到这一点?一次写入整个文件不是一种选择。

我一直在研究NSFileHandle,看起来它会做我想做的事情;现在我无法弄清楚如何找到X行,然后用字符串中的数据替换它。我想在完成之后,我需要做的就是调用synchronizeFile,对吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果不编写整个文件,就无法真正做到这一点。您可以寻找行的开头,然后编写新行。但首先你必须找出那条线的偏移量。如果您还没有这意味着从头到尾读取文件。然后您可以编写新行,但前提是它与原始行的长度完全相同。如果它更长,它将覆盖下一行 - 没有办法将数据插入文件。如果新行比旧行短,则旧行的末尾将保留。相同的长度要求也很棘手。这意味着相同的字节长度。根据字符编码,某些字符可能需要比其他字符更多的字节。

如果你真的需要这样做并让它适​​用于所有情况,你必须使用这些步骤:

  1. 阅读整个文件,找出您感兴趣的行的偏移​​量
  2. 寻找线的偏移量
  3. 写新行
  4. 写出您在步骤1中阅读的其余文件。
  5. 无论线条有多长或多短或如何编码,此算法都可以使用。但这可能比写出整个文件更昂贵,特别是如果你把它放在内存中的话。

    您是否确实已经确认写出整个文件是不可接受的,或者您是否在此处进行过早优化?如果您的文本文件非常大,那么您应该考虑使用SQLite等数据库,或者使用Core Data。