2009-12-25 65 views
3

我正在用fgetc讀取文件,所以每次讀取一個字符時,光標位置都會發生變化。獲取文件中的光標位置C

是否有可能在每次讀取之後知道文件上的光標在列和行號上的「座標」?

感謝

+0

如果不是,就在讀取之前 – asdf 2009-12-25 09:42:02

回答

7

您可以使用ftell

它不給你的行和列的條款的位置,但給從一開始就流中的當前位置。

5

文件中沒有「座標」,只有一個位置。一個文本文件只是一個字節流,而且行之間用換行符分隔。所以,在閱讀文本文件時,如果掃描整個文件,則可以計算出「座標」。這意味着,如果您確實需要某些「行」和「列」值:

  • 逐行讀取文件。計算換行符,並獲得「行」編號。請注意,在不同的操作系統上有不同的換行符 - UNIX的行結尾與Windows不同。
  • 逐字讀出問題所在的行,並將字符計數到有問題的位置。這會得到你的「列」號碼。你顯然需要接受「列」的數量可以「行」之間變化,這是完全可能有「行」與0

「列數」不同的方法將

  • 逐行讀取文件並構建換行符的位置數組(使用ftell)。
  • 現在來計算任何字符的位置,只是在文件中獲得它的位置,然後找到最近的前一個換行符。從換行符到您獲得「行」的字符,從換行符的位置和當前位置之間的差異可以得到「列」。

但最重要的是接受文件中沒有行或列 - 文件中有一個位置,但文件本身只是一個字節流。這也意味着你需要處理以寬字符集編碼的文件,因爲字符不再映射到一個字節。