Я пытаюсь sscanf
читать кучу последовательных строк фиксированной длины, но это не очень хорошо работает. Я могу напечатать строку фиксированной длины следующим образом:
sprintf('%.5s', 'aaaaabbbbb');
Но если я попытаюсь использовать %.5s
читать строку фиксированной длины (например, первые 5 байтов входной строки) не работает. например.
var_dump(sscanf('aaaaabbbbb', '%.5s'));
Если я сделаю это var_dump
возвращается NULL
и я получаю следующее предупреждение:
Warning: sscanf(): Bad scan conversion character "."
Я старался %5s
в дополнение к %.5s
но это не работает так, как хотелось бы. например.
var_dump(sscanf('aa aabbbbb', '%5s'));
Это возвращает это:
array(1) {
[0]=>
string(2) "aa"}
То, что я хотел бы это вернуть это:
array(1) {
[0]=>
string(5) "aa aa"}
Есть идеи?
Проблема в том, что любой пробел считается новым вводом с использованием %s
,
В соответствии с http://php.net/manual/en/function.sscanf.php
комментарий, это должно работать:
$result = sscanf(" Vendor: My Vendo Model: Super Model Foo Rev: 1234",
' Vendor: %8[ -~] Model: %16[ -~] Rev: %4c',
$vendor, $model, $rev);
Итак, в вашем случае:
var_dump(sscanf('aa aabbbbb', '%5[ -~]'));
Отлично работает на PHP 5.2.10.
Других решений пока нет …