皆さん、こんにちは。私はUNtools(2.6.2)で「Export Assetpackage」機能を使おうとしているのですが、かなり厄介なエラーに直面しており、どなたか修正方法を教えていただければと思っています。 <\/P>
データロード用のワークブックに関する他の機能を試しているため、同じローカルジオデータベース内に複数のUtility networkを作成しました。その結果、2番目に作成したUtility networkのクラス名が「_1」で終わるものが存在しています。これはそのユーティリティネットワークモデル内のすべての異なる名前に当てはまります。
名前問題の例<\/span><\/span><\/P>このUNをassetpackageにエクスポートしようとすると、次のエラーが発生します:<\/P>"line 623, in parse_un_class
raise ValueError("'{}' did not satisfy regex".format(name))
ValueError: 'StructureBoundary_1' did not satisfy regex"<\/P> <\/P>このエラーが指す "common.py" ファイルの623行目を見ると、以下の関数の一部であることがわかります:<\/P>@lru_cache()<\/EM>
def parse_un_class(class_name: str, structure_as_none: bool = False) -> Tuple:<\/EM>
"""class_nameを解析してドメイン名とクラス種別を抽出する関数です。<\/EM><\/P>引数:<\/EM>
class_name (str): UNクラスへのパス。<\/EM>
structure_as_none (bool): Structure Networkを ``None`` として返すかどうか。デフォルトは ``False`` 。<\/EM><\/P>戻り値:<\/EM>
tuple: (ドメイン名, クラス種別)<\/EM><\/P>例:<\/EM>
>>> parse_un_class("Naper.un.ElectricLine")<\/EM>
("Electric", "Line")<\/EM>
>>> parse_un_class("C:\/con.sde\/Naper.un.Electric\/Naper.un.StructureBoundary")<\/EM>
("Structure", "StructureBoundary")<\/EM>
>>> parse_un_class("C:\/con.sde\/Naper.un.Electric\/Naper.un.StructureBoundary", structure_as_none=True)<\/EM>
(None, "StructureBoundary")<\/EM><\/P>例外:<\/EM>
ValueError: ``class_name`` が有効なUNクラスでない場合に発生。<\/EM>
"""<\/EM>
if class_name is None:<\/EM>
return None, None<\/EM><\/P># TODO: 重複クラス名(例:StructureJunction_2)を処理できるように書き換える必要あり<\/EM>
name = os.path.split(class_name)[-1].rpartition('.')[-1]<\/EM>
# サブネットはドメイン名ではなくLineに含めるため遅延量指定子を使用<\/EM>
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',<\/EM>
name, re.IGNORECASE)<\/EM>
if not res:<\/EM>
raise ValueError("'{}' did not satisfy regex".format(name))<\/EM>
else:<\/EM>
domain, class_type = res[0]<\/EM>
# Structureドメインのクラス種別は 'Structure(Junction|Line|Boundary)' です<\/EM>
if domain.upper() == 'STRUCTURE':<\/EM>
class_type = "Structure" + class_type<\/EM>
if structure_as_none:<\/EM>
domain = None<\/EM>
return domain, class_type
今、作成者は自分自身のために重複クラス名をサポートできるようこの関数を書き換える「TODO」を入れていることがわかります。
誰か、「parse_un_class(class_name: str, structure_as_none: bool = Fals) -> Tuple:" 関数の一部を編集して私の "_1" のUN要素を受け入れるようにする方法についてアイデアはありますか?
編集しようとした部分:
res = re.findall('(.+?)(Assembly|Device|Junction|Line|SubnetLine|Boundary|EdgeObject|JunctionObject)$',
name, re.IGNORECASE)
末尾に "_1" を追加してみました:
res = re.findall('(.+?)(Assembly_1|Device_1|Junction_1|Line|SubnetLine_1|Boundary_1|EdgeObject_1|JunctionObject_1)$',
name, re.IGNORECASE)
しかし、同じエラーが発生します。編集すべきでない箇所をあまりいじりたくありませんが、モデル構築に非常に多くの時間を費やしたので諦めてやり直すわけにはいきません。
何かヒントや考え、アイデアがあればぜひ教えてください!
追伸:UNtoolsのバージョンアップはできません。最終的にUNMが配置されるエンタープライズサーバーのバージョンに合わせる必要があるためです。