Я определил цикл for следующим образом: он просматривает файл, состоящий из двух столбцов, когда находит ключевое слово DEFINE_MENU
, второй столбец в этой строке ссылается на заголовок экрана. Следующий экземпляр ключевого слова будет определять заголовок для отдельного экрана и т. Д. На n-м экране. На данный момент код может определять первый заголовок меню.
Возможно ли, когда я достигну второго экземпляра ключевого слова DEFINE_MENU
, повторить цикл для той же строки, установив title_flag = 0
, повторяя тем самым себя, захватывая заголовок второго меню?
def getInfo():
title_flag = 0
number = 1
menus = {}
items = {}
title = None
file = open('some_file', 'r')
for line in file:
# Test for comments, if they exist pass and move on
if line[0] == '#':
continue
# Hop over blank lines
if re.search(r'^\s+$', line):
continue
# Find the line where the title is defined
if re.search('DEFINE_MENU', line) and title_flag == 0:
type, name = line.split()
title = name
title_flag = 1
continue
# If DEFINE_MENU is found and flag has been raised, this
# signifies a new menu definition so break.
if re.search('DEFINE_MENU', line) and title_flag == 1:
break
if re.search('PRIV', line):
(type, name, priv_holder, *description) = line.split()
else:
(type, name, *description) = line.split()
# If flag has been raised, the line must follow the definition
# of the menu, it must contains info regarding a menu item.
if title_flag == 1:
description = ' '.join(description)
items[str(number)] = name
number += 1
file.close()
menus[title] = items
return menus
Спасибо за ваш вклад!
Tom
РЕДАКТИРОВАТЬ: Во-первых, извинения за вызванную путаницу. Возможно, я думал о проблеме как о более простой, чем я думал, и дал меньше информации, чем требовалось. Я углублюсь глубже, входной файл, который я использую, имеет форму:
# MENU TYPE NAME PRIV? DESCRIPTION
DEFINE_MENU CRAGINS
MENU menu_name1 This takes you to menu 1
MENU menu_name2 This takes you to menu 2
VARIABLE var_name1 Alter variable1
VARIABLE var_name2 PRIV Alter variable1
COMMAND command1 Perform command1
DEFINE_MENU MENU2
MENU menu_name3 This takes you to menu 3
MENU menu_name4 This takes you to menu 4
VARIABLE var_name3 Alter variable3
VARIABLE var_name4 PRIV Alter variable4
COMMAND command3 Perform command3
Я поднял флаг, когда продолжаю манипулировать данными между вызовами DEFINE_MENU
. Я отредактировал код, чтобы включить полный метод, который я написал.
Результатом в настоящее время является словарь, ключом которого является заголовок меню, а значением - другой словарь, содержащий пункты меню (значения, следующие за заголовком) следующим образом:
{'title1': {'1': 'menu_name1', '3': 'var_name1', '2': 'menu_name2', '5': 'command1', '4': 'var_name2'}}
Я хотел бы иметь больший словарь, содержащий заголовки меню в качестве ключей и словарь самого низкого уровня в качестве значения. Я понимаю, что это сложно, поэтому извините, если неясно, дайте мне знать, если требуется дополнительная информация.
Еще раз спасибо
Tom