sscanf讀取文件

用sscanf+ReadString函數來讀取txt文件
用sscanf函數來讀取文件
關於文件讀取的有好多文章,可能大家平時見得最多的是CStdioFile的ReadString,用ReadString是可以讀取文件的一行,但是要從這一行中提取相關的數據,sscanf這個C函數就相當有用,在些之前我不知道擁有這樣一個函數,自已寫了一個從行中提取相關的數據函數,結果效率很低,因爲讀取的行數特別多,操作就很慢了
sscanf函數的原形如下 
sscanf (string str, string format [, string var1...])
str是要提取的字符串行,後面的參數是要提取的文件格式,最後面是提取的數據要存儲的變量名。它可以根據這一行字符串和指定的提取格式來進行讀取,比如
str=10 1.03  23.10  45.45 ,可以用"%d %f %f %f"的格式
這是我讀取一個格式如下的文件中的一個函數,直接從程序中取的一個,沒有單獨寫一個這樣的函數,不過相信大家一定能夠看得明白sscanf函數的使用方式

還可以這樣用
sscanf(stringBuf.c_str(), "%20[^#]#%20[^\n]",......)
“%[ ]”符號用於聲明字符串,它比“%s”更具體,可以用於設置讀取的樣式。例如“%[a-z]”只讀取小寫字母,讀到其它字符就結束。注意,方括號中如果有“^”,代表一直讀到某字符爲止。例如:
“%[^#]”:讀取字符串,一直到出現“#”號爲止。
“%20[^#]”:讀取20個字節的字符串,出現“#”號時結束。
所以,“%20[^#]#%20[^\n]”的意義就是,
讀取兩個20字節大小的字符串,第一個字符串可以用#結束,第二個字符串可以用回車符結束。
下面是一個比較全面的解釋:
名稱:  sscanf() - 從一個字符串中讀進與指定格式相符的數據. 
語法:  int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
整數 sscanf( 字符串 str, 字符串 fmt, 混合 var1, 混合 var2 ... ); 
用法:  以指定的格式 fmt 去解讀字符串 str. fmt 中除了 %d 和 %s 以外, 亦可包含其他的字符串作爲格式. 每一個 %d 或 %s 都對應一個參數, 按順序爲 var1, var2 ... %d 讀入一個整數到參數中, 而 %s 讀入一個字符串. * 亦可用於格式中, (即 %*d 和 %*s) 加了星號 (*) 表示跳過此數據不讀入. (也就是不把此數據讀入參數中) LPC 的 sscanf() 與 C 的 sscanf() 雖然相似, 但仍有不同之處. LPC 的 sscanf() 不需要 (也不可) 提供變量的內存位址給 sscanf(), 只需要給予變量的名字. 另一個不同點是, LPC 的 sscanf() 對於: sscanf( str, "%s %s", str1, str2 ); 的語法, 將會把 str 中的第一個英文單字 (即第一個空白字符以前的內容) 讀入 str1, 後面其餘的內容讀入 str2.
sscanf() 會返回符合格式的 %d 和 %s 總數. 
注意:如果是文件中是double類型的變量,用%f讀取是不正確的,我還不知道用什麼格式才能正確讀寫,要把double類型改爲float才能正確讀寫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章