我使用C和我的知識是非常基本的。 我想掃描文件並獲得唯一的第一或第二行之後的內容...如何在fscanning .txt文件時跳過第一行?
我想:
fscanf(pointer,"\n",&(*struct).test[i][j]);
但是這句法簡單地從第一條線= \
開始這怎麼可能 ?
謝謝。
我使用C和我的知識是非常基本的。 我想掃描文件並獲得唯一的第一或第二行之後的內容...如何在fscanning .txt文件時跳過第一行?
我想:
fscanf(pointer,"\n",&(*struct).test[i][j]);
但是這句法簡單地從第一條線= \
開始這怎麼可能 ?
謝謝。
fgets將得到一行,並設置從下一行開始的文件指針。然後,你可以在第一行之後開始閱讀你想要的內容。
char buffer[100];
fgets(buffer, 100, pointer);
只要您的第一行長度小於100個字符,它就會工作。否則,您必須檢查並循環。
目前尚不清楚什麼是你想存儲數據到所以它不容易猜到的答案,順便說一句,你可以直接跳過字節,直到你去一個\n
:
FILE *in = fopen("file.txt","rb");
然後你可以要麼跳一整行與fgets
,但它是不安全的(因爲你將需要估計行先驗的長度),否則使用fgetc
:
uchar8 c;
do
c = fgetc(in);
while (c != '\n')
最後,你應該有你的內部格式符實際分析數據,如
fscanf(in, "%f", floatVariable);
可以參考here爲符。
fgets會在這裏工作。
#define MAX_LINE_LENGTH 80
char buf[MAX_LINE_LENGTH];
/* skip the first line (pFile is the pointer to your file handle): */
fgets(buf, MAX_LINE_LENGTH, pFile);
/* now you can read the rest of your formatted lines */
我能夠跳過具有scanf的線與下面的指令:
fscanf(config_file, "%*[^\n]\n", NULL);
格式字符串表示含有包括空格的任何字符的線。格式字符串中的*和NULL指針意味着我們不希望保存該行,而只是增加文件位置。
格式串的解釋:
%
是其中每個scanf格式串中開頭的字符;
*
表示不會將找到的模式放在任何位置(通常您將格式字符串之後的模式找到參數中,在這種情況下參數爲NULL);
[^\n]
表示除換行符之外的任何字符;
\n
表示換行符;
因此[^\n]\n
表示以換行符結尾的全文文本行。
參考文獻here。
這是最小的解決方案,它的工作非常好,謝謝! – 2013-06-02 05:45:03
這真是太棒了!但是我真的不明白,如果你能解釋得更多,它會幫助更多像我這樣的人,我以前從來沒有見過''%* [^ \ n] \ n「' – buzhidao 2014-07-30 04:10:00
@buzhidao' *'指示'fscanf'(實際上所有的'scanf'系列)解析格式字符串中提供的數據,但不將其存儲在任何目標地址處(這很好,因爲沒有提供一個參數列表),'[^ \ n]'表示tak除了*換行符以外的任何東西*,所有數據將被消耗到(但不包括)換行符。最後,最後的'\ n'的意思是「並且消耗(並且忽略)新行」(我們在滿足先前的格式規範時就停下來了)。順便說一句,在參數列表中不需要NULL。 – WhozCraig 2016-03-30 08:49:40
非常感謝! – NLed 2010-05-10 00:12:42
謝謝,我創建了一個問題,然後刪除它,並在這裏找到我的答案:) – Bionix1441 2017-09-21 11:48:46