sscanf, разбор строки. -
wh0am1 - 15.12.2013
Доброго времени суток.
Есть строка: 0,10|0,110|0,0|1,2|0,0|6,70|0,0|0,0|0,0|0,0|0,0|0, 0|0,0|0,0|0,0|0,0|0,0|0,0|0,0|0,0
20 ячеек, в каждой ТИП и КОЛ-ВО.
Массив:
PHP код:
enum _inventory {
TYPE,
NUM
}
new INVENTORY [ MAX_PLAYERS ] [ 20 ] [ _inventory ] ;
Как, более грамотно, при помощи sscanf, вытащить данные из строки, и записать в массив?
Что-то вроде такого:
PHP код:
sscanf ( temp, "p<|>e<ip<,>i>[20]", INVENTORY [ 0 ] )
Re: sscanf, разбор строки. -
Mutha_X - 15.12.2013
Сразу скажу, что ты неправильно походишь к инвентарю. Нужно разбить на строки инвентарь так, чтобы в каждой строке описывался 1 предмет, тогда ты сможешь записывать в файл только те строки вещей,которые есть у игрока -> экономия времени загрузки(хоть и не большая) + в будущем не будет проблем с увеличением лимита вещей в инвентаре.
Re: sscanf, разбор строки. -
wh0am1 - 15.12.2013
Хм. Не совсем понял что ты имел ввиду. Не мог бы показать небольшой пример.
Сейчас у меня хранится строка с инвентарем, в таблице игроков, в одной ячейке.
Я еще думал сделать отдельную таблицу для инвентаря, с ячейками ID_PLAYER | ITEM_TYPE | NUMS, но подумал что в этом нет необходимости.
Re: sscanf, разбор строки. -
Urukhay - 16.12.2013
Принцип сканирования:
pawn Код:
sscanf(temp,"p<|>s[15]s[15]s[15]s[15]s[15]s[15]s[15]s[15]",itog,itog,itog,itog,itog,itog,itog);
Где: temp - строка содержащая "кашу", и которую нужно отсортировать.
p<|> означает что все значения этой строки мы будем отделять попеременно этим символом '
|'. И отделять мы их будем как строку (не как число, так как у Вас там идут 2 числа и запятая). itog - куда мы выведем одну из частей той большой строки разделением знаком '
|'.
В итоге в переменной
itog, у вас будет такого типа данные "14,176" - тобишь числа, но они в види текста
! Ну и далее мы так может каждую строчку отделить.
Конечно способ это несколько муторный. Но может я не совсем понял что вам нужно?
Re: sscanf, разбор строки. -
wh0am1 - 16.12.2013
Quote:
Originally Posted by Urukhay
Принцип сканирования:
pawn Код:
sscanf(temp,"p<|>s[15]s[15]s[15]s[15]s[15]s[15]s[15]s[15]",itog,itog,itog,itog,itog,itog,itog);
Где: temp - строка содержащая "кашу", и которую нужно отсортировать. p<|> означает что все значения этой строки мы будем отделять попеременно этим символом ' |'. И отделять мы их будем как строку (не как число, так как у Вас там идут 2 числа и запятая). itog - куда мы выведем одну из частей той большой строки разделением знаком ' |'.
В итоге в переменной itog, у вас будет такого типа данные "14,176" - тобишь числа, но они в види текста ! Ну и далее мы так может каждую строчку отделить.
Конечно способ это несколько муторный. Но может я не совсем понял что вам нужно?
|
Спасибо конечно. Но я хотел бы обойтись без костыля, думал можно вытащить все более "красиво", через несколько аргументов. А так, можно сделать немного и попроще.
Наверно буду думать, как по другому сохранять инвентарь. Если кто подскажет оптимальный вариант, буду рад .
Re: sscanf, разбор строки. -
Mutha_X - 16.12.2013
invt|0|ITEM_TYPE|NUM\n
invt|1|ITEM_TYPE|NUM\n
...
invt|N|ITEM_TYPE|NUM\n
где invt - ключ(нужно, если у тебя на файлах), N - номер слота. И построчно анализируешь - записывать можно лишь те, которые есть у игрока.