我想读取由空格分隔的'm'个整数,所以我不知道会使用多少个格式修饰符。
根据PHP文档
说明
mixed fscanf ( resource $handle , string $format [, mixed &$... ] )
函数fscanf()类似于sscanf(),但它接受输入 从与句柄相关联的文件中解释输入 到指定的格式,在文档中描述 的sprintf()。
格式字符串中的任何空格都匹配中的任何空格 输入流。这意味着即使是格式字符串中的tab \ t也可以 匹配输入流中的单个空格字符。
每次调用fscanf()都会从文件中读取一行。
因此可以在fscanf()的第二个参数中使用变量格式修饰符
例如。
fscanf($_fp,"%d\t%d\t%d\n");
由于已知的数组大小,因此它是3%d修饰符。
我知道可以使用fgets($_fp)
或fscanf($_fp,"%[^\n]")
,但fgets($_fp)
会返回字符串,fscanf($_fp,"%[^\n]")
会返回未编制的结果。在这两种情况下,我都无法做到这一点
arr[i] = fscanf($_fp,"%d\t%d\t%d\n"); //Because I need a integer array
其中arr[i]
包含另一个存储返回数组的数组
fscanf($_fp,"%d\t%d\t%d\n")
。
即..将无法直接使用fscanf()初始化数组。 假设
I / P
2 3 4
2 3 4
4 5 1
但是I / p可以是任何大小,因此可以在fscanf()的第二个参数中使用正则表达式或其他任何东西,以便直接存储在数组中。
答案 0 :(得分:0)
您不需要理解正则表达式的fscanf()
。您可以使用fgets()
一次一行地读取文件中的数据,然后使用preg_match()
或preg_match_all()
对其进行解析。
如果您知道该行只包含以空格分隔的数字,那么explode()
也会完成这项工作。