2010-05-09 86 views
10

我使用C和我的知識是非常基本的。 我想掃描文件並獲得唯一的第一或第二行之後的內容...如何在fscanning .txt文件時跳過第一行?

我想:

fscanf(pointer,"\n",&(*struct).test[i][j]); 

但是這句法簡單地從第一條線= \

開始這怎麼可能 ?

謝謝。

回答

13

fgets將得到一行,並設置從下一行開始的文件指針。然後,你可以在第一行之後開始閱讀你想要的內容。

char buffer[100]; 
fgets(buffer, 100, pointer); 

只要您的第一行長度小於100個字符,它就會工作。否則,您必須檢查並循環。

+0

非常感謝! – NLed 2010-05-10 00:12:42

+0

謝謝,我創建了一個問題,然後刪除它,並在這裏找到我的答案:) – Bionix1441 2017-09-21 11:48:46

12

目前尚不清楚什麼是你想存儲數據到所以它不容易猜到的答案,順便說一句,你可以直接跳過字節,直到你去一個\n

FILE *in = fopen("file.txt","rb"); 

然後你可以要麼跳一整行與fgets,但它是不安全的(因爲你將需要估計行先驗的長度),否則使用fgetc

uchar8 c; 
do 
    c = fgetc(in); 
while (c != '\n') 

最後,你應該有你的內部格式符實際分析數據,如

fscanf(in, "%f", floatVariable); 

可以參考here爲符。

+0

感謝您的回覆,我嘗試使用'「rb」'但沒有工作:( 謝謝你的鏈接到說明符,即時檢查他們 – NLed 2010-05-10 00:13:21

+3

它不應該是「rb」而只是「r」 – Casey 2010-05-10 00:38:17

+0

http://www.cplusplus.com/reference/clibrary/cstdio/fopen/ – Casey 2010-05-10 00:38:58

2

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 */ 
24

我能夠跳過具有scanf的線與下面的指令:

fscanf(config_file, "%*[^\n]\n", NULL); 

格式字符串表示含有包括空格的任何字符的線。格式字符串中的*和NULL指針意味着我們不希望保存該行,而只是增加文件位置。

格式串的解釋:
%是其中每個scanf格式串中開頭的字符;
*表示不會將找到的模式放在任何位置(通常您將格式字符串之後的模式找到參數中,在這種情況下參數爲NULL);
[^\n]表示除換行符之外的任何字符;
\n表示換行符;

因此[^\n]\n表示以換行符結尾的全文文本行。

參考文獻here

+1

這是最小的解決方案,它的工作非常好,謝謝! – 2013-06-02 05:45:03

+0

這真是太棒了!但是我真的不明白,如果你能解釋得更多,它會幫助更多像我這樣的人,我以前從來沒有見過''%* [^ \ n] \ n「' – buzhidao 2014-07-30 04:10:00

+0

@buzhidao' *'指示'fscanf'(實際上所有的'scanf'系列)解析格式字符串中提供的數據,但不將其存儲在任何目標地址處(這很好,因爲沒有提供一個參數列表),'[^ \ n]'表示tak除了*換行符以外的任何東西*,所有數據將被消耗到(但不包括)換行符。最後,最後的'\ n'的意思是「並且消耗(並且忽略)新行」(我們在滿足先前的格式規範時就停下來了)。順便說一句,在參數列表中不需要NULL。 – WhozCraig 2016-03-30 08:49:40