использование sscanf для чтения строк фиксированной длины

Я пытаюсь 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"}

Есть идеи?

4

Решение

Проблема в том, что любой пробел считается новым вводом с использованием %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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]