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才能正确读写
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章