Ну вот такой ответ был бы по-человечески.@Фанат, я честно потратил два часа на написание такого парсера.
На каждом шаге у меня появлялось больше и больше вопросов.
!
! OpenBSC (UNKNOWN) configuration saved from vty
!!
password foo
!
log stderr
logging filter all 1
logging color 1
logging print category 0
logging timestamp 0
logging level all everything
logging level rll everything
logging level cc everything
logging level mm everything
logging level rr everything
logging level rsl everything
logging level nm everything
logging level mncc notice
logging level pag notice
logging level meas notice
logging level sccp notice
logging level msc notice
logging level mgcp notice
logging level ho notice
logging level db notice
logging level ref notice
logging level gprs debug
logging level ns info
logging level bssgp debug
logging level llc debug
logging level sndcp debug
logging level nat notice
logging level ctrl notice
logging level smpp debug
logging level filter debug
logging level lglobal notice
logging level llapd notice
logging level linp notice
logging level lmux notice
logging level lmi notice
logging level lmib notice
logging level lsms notice
logging level lctrl notice
logging level lgtp notice
!
line vty
no login
!
e1_input
e1_line 0 driver ipa
e1_line 0 port 0
no e1_line 0 keepalive
network
network country code 250
mobile network code 77
short name AYtest
long name AYtest
auth policy accept-all
location updating reject cause 13
encryption a5 1
neci 1
paging any use tch 0
rrlp mode none
mm info 1
handover 0
handover window rxlev averaging 10
handover window rxqual averaging 1
handover window rxlev neighbor averaging 10
handover power budget interval 6
handover power budget hysteresis 3
handover maximum distance 9999
timer t3101 10
timer t3103 0
timer t3105 0
timer t3107 0
timer t3109 4
timer t3111 0
timer t3113 60
timer t3115 0
timer t3117 0
timer t3119 0
timer t3122 10
timer t3141 0
dtx-used 0
subscriber-keep-in-ram 0
extension-prefix 0
bts 0
type sysmobts
band GSM900
cell_identity 0
location_area_code 1
base_station_id_code 63
ms max power 10
cell reselection hysteresis 4
rxlev access min 0
periodic location update 30
radio-link-timeout 32
channel allocator ascending
rach tx integer 9
rach max transmission 7
channel-descrption attach 1
channel-descrption bs-pa-mfrms 5
channel-descrption bs-ag-blks-res 1
ip.access unit_id 1801 0
oml ip.access stream_id 255 line 0
neighbor-list mode automatic
codec-support fr
gprs mode none
no force-combined-si
trx 0
rf_locked 0
arfcn 990
nominal power 35
max_power_red 14
rsl e1 tei 0
timeslot 0
phys_chan_config CCCH+SDCCH4
hopping enabled 0
timeslot 1
phys_chan_config SDCCH8
hopping enabled 0
timeslot 2
phys_chan_config TCH/F
hopping enabled 0
timeslot 3
phys_chan_config TCH/F
hopping enabled 0
timeslot 4
phys_chan_config TCH/F
hopping enabled 0
timeslot 5
phys_chan_config TCH/F
hopping enabled 0
timeslot 6
phys_chan_config TCH/F
hopping enabled 0
timeslot 7
phys_chan_config TCH/F
hopping enabled 0
trx 1
rf_locked 0
arfcn 980
nominal power 35
max_power_red 14
rsl e1 tei 0
timeslot 0
phys_chan_config TCH/F
hopping enabled 0
timeslot 1
phys_chan_config TCH/F
hopping enabled 0
timeslot 2
phys_chan_config TCH/F
hopping enabled 0
timeslot 3
phys_chan_config TCH/F
hopping enabled 0
timeslot 4
phys_chan_config TCH/F
hopping enabled 0
timeslot 5
phys_chan_config TCH/F
hopping enabled 0
timeslot 6
phys_chan_config TCH/F
hopping enabled 0
timeslot 7
phys_chan_config TCH/F
hopping enabled 0
mncc-int
nitb
subscriber-create-on-demand
smpp
local-tcp-port 2775
policy closed
no smpp-first
$rows = file($filename) - вернет массив строк.
$level=0;
$root = new ArrayObject();
$root->parent = NULL;
$root->children=[];
foreach($rows as $r)
проверка на то, что $r не надо пропустить
$new_level = (int)strspn($r,' '); - считает отступы
if ($new_level>$level) {
пусть на следующей строке может больше быть только на 1 пробел,
иначе в $root надо записывать количество, а при выходе наверх учитывать это
$child = new ArrayObject();
$child->parent = $root;
$root->children[] = $child;
$root = $child;
$level=$new_level;
}elseif($new_level<$level){
for($level - $new_level)
if ($root->parent !== NULL) ...
$root =$root->parent; - возврат на нужный уровень
$level=$new_level;
}
// если уровень тот же - просто добавляем лист в узел
$root[] = explode(trim($r),''); -- вероятно, нужен другой парсер строки формата "key value"
}
дальше надо отформатировать вывод $root в нужном формате
Это называется морочить людям голову.исходный конфиг я упростил
Вы обиделись?)Это называется морочить людям голову.
Да при чем здесь обиделся. Эта реплика совсем мимо кассы.Вы обиделись?)
Я всегда прихожу в восторг от таких фраз ) Две с половиной недели парсить конфиг....Две с половиной недели ушло на топорное решение, многовато, конечно.
Приятно, что вас так легко привести в восторг)Я всегда прихожу в восторг от таких фраз ) Две с половиной недели парсить конфиг....
Вот какой смысл спорить с человеком, который заранее заявил, что никаких аргументов не примет и вообще всё лучше тебя знает?…соглашусь, . Но это не так)
Вы получаете какое-то сомнительное удовольствие от общения в этой ветке, дорогой @AnrDaemon ? Зачем вы тратите свое время?Вот какой смысл спорить с человеком, который заранее заявил, что никаких аргументов не примет и вообще всё лучше тебя знает?…
Вот опять. Какой смысл отвечать на вопрос, когда вы уже приняли решение и явно не собираетесь его менять?…Вы получаете какое-то сомнительное удовольствие
Вот опять. Какой смысл отвечать на вопрос, когда вы уже приняли решение и явно не собираетесь его менять?…
да, учебный материал первого курса в интернете обсуждают редко - его знают почти всеесли бы кто-нибудь скинул пример дерева. В инете с этим туговато. Спасибо за код.