簡體   English   中英

我如何從特定點開始閱讀文本文件?

[英]How do i start reading a text file from a specific point?

所以我的問題基本上是,我如何從特定行開始讀取文件,例如第 14 行到第 18 行?

我正在開發一個簡單的 ContactList 應用程序,唯一缺少的是刪除特定名稱的信息。 用戶可以創建一個新聯系人,該聯系人具有姓名、號碼和地址作為信息。 我希望用戶也能夠通過輸入他們的名字來刪除那個人的數據。 然后,程序應讀取名稱及其下的所有 4 行,並將它們從文本文件中刪除。 我怎么能做到這一點?

你不能。 您需要閱讀前 n 行才能找出哪一行有哪個數字。 除非你的記錄每行有固定的長度(這不是一個好主意 - 總有你能想到的名字更長的人)。

同樣,您不能從文本文件中刪除一行。 磁盤上的空間不會自行移動。 您需要一個實現安全保存和重新排列數據的算法:

foreach line in input_file:
    if line is needed:
        write line to temporary_output_file
    else:
        ignore (don't write = delete)
delete input_file
move temporary_output_file to input_file

缺點:當 input_file 和 temporary_output_file 都存在時,你需要大約兩倍的磁盤空間。

通過安全保存,NTFS 文件系統驅動程序將為移動的文件提供與刪除文件之前相同的時間戳。 閱讀Windows Internals 7 書(應該是第 2 部分,第 11 章)以詳細了解它。

根據聯系人列表的大小(可能少於 10M 個條目),將整個數據庫加載到 memory 中,刪除記錄然后再寫回所有內容是沒有問題的。

您可以跳轉到文件中的任何偏移量。 但是,除非您知道每行的長度,否則無法知道特定行的起始位置。

如果您正在編寫聯系人應用程序,則不應使用常規文本文件,除非:

  1. 您填充行長度,以便您可以輕松計算每行的 position。
  2. 您正在將整個文件加載到 memory。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM