Я хочу прочитать ‘m’ число целых чисел, разделенных пробелом, поэтому я не знаю, сколько модификаторов формата будет использоваться.
Согласно документации PHP
Описание
mixed fscanf ( resource $handle , string $format [, mixed &$... ] )
Функция fscanf () похожа на sscanf (), но она требует ввода
из файла, связанного с дескриптором и интерпретирует ввод в соответствии с
в указанном формате, который описан в документации для
Sprintf ().Любой пробел в строке формата соответствует любому пробелу в
входной поток. Это означает, что даже вкладка \ 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 () для непосредственного хранения в массиве.
Вам не нужен fscanf()
это понимает регулярные выражения. Вы можете прочитать данные из файла по одной строке, используя fgets()
затем разобрать его с помощью preg_match()
или же preg_match_all()
.
Если вы знаете, что строка содержит только числа, разделенные пробелами, то explode()
делает работу тоже.
Других решений пока нет …