ABAQUS名稱標準化工具

 作為一個ABAQUS二次開發者, 肯定少不了批量建立工況名稱, Job名稱之類的操作, 而從csv以及Excel文件導進來的字符串并不能很好地符合ABAQUS標準, 所以才有了這個小工具的面世。




01


標準化思路



    我們先在ABAQUS中隨便創建一個不符合命名規定的step, 將報錯窗口截圖如下:

ABAQUS名稱標準化工具的圖1

Invalid name:

Names must be 1-38 characters long, may not begin with a number, may not begin or end with space or an underscore, and may not contain double quotes, periods, backward slashes, or non-printable characters.


    譯文如下:

無效的名稱:

名稱必須長度為1-38個字符,不能以數字開頭,不能以空格或下劃線開頭或結尾,不能包含雙引號、句號、反斜杠或不可打印的字符。

    再建立一個不符合要求的Job, 報錯如下:

ABAQUS名稱標準化工具的圖2

    

Invalid name:

Names must be 1-80 characters long, may not begin or end with an underscore, and may not begin with a dash, and may not contain double quotes, periods, backward slashes, or non-printable characters or the following characters:......


    譯文如下:

無效的名稱:

名稱必須長度為1-80個字符,不能以下劃線開頭或結尾,不能以破折號開頭,不能包含雙引號、句號、反斜杠或不可打印字符或以下字符:......

    為了簡化處理這個問題, 我建議將所有規則做一個并集, 在符合該規則的情況下可以為所有ABAQUS的前處理進行命名.

    暫時以這兩個為例, 總結一下命名規則:

  1. may not be begin or end with: 

    1. 數字(0123456789)

    2. 空格(" ")

    3. 下劃線("_")

    4. 破折號("-")

  2. may not contain:  .  $  &  *  ~  !  (  )  [  ]  {  }  |  ;  :  '  `  "  <  >  ?  /  \  

  3. 總長度不超過38


    這些不符合規定的字符串, 我們都有轉換為符合規定的字符串, 這些不符合規定的字符串大多數都是起著鏈接的作用, 我找了一圈, 發現加號(+)是一個不錯的代替者, 所以我將所有不能使用的字符均代替為"+"

    接下來按照慣例, 我們整理一下流程:

  1. 輸入的變量必須判斷類型.

  2. 解決中英文符號的問題, 并將多空格轉換為單空格.

  3. may not contain中的字符串全部轉為"+".

  4. 判斷字符串長度是否超過需求, 若超過則截斷.

  5. may not be begin or end with中的字符串轉換為"+"

  6. 返回結果字符串



02


源代碼

# -*- coding: utf-8 -*-
# -*- coding: mbcs -*-  
# @Time    : 2021-1-20 13:55
# @Author  : Group
# @Email   : **********
# @File    : standard.py
# @Software: PyCharm
import re


def standard_str(s, length=20, flag='+'):
    """
    為防止出現不標準的名稱導致錯誤, 將所有字符串進行標準化.
    該方法應根據已知的ABAQUS命名規則編寫, 并在日常使用中進行豐富和擴展.
    :return: s
    """

    """
    輸入的變量必須判斷類型, 如果是字節類型, 需要進行解碼, 如果不是字節也不是字符串就轉換為字符串, 轉換失敗就報錯.
    """

    if s is None:
        s = ''
    elif not isinstance(s, str):
        s = str(s.encode("utf-8"))

    """
    解決中英文符號的問題, 并將多空格轉換為單空格.
    """

    # 中英文符號統一
    s = s.replace('(', '(').replace(')', ')').replace('【', '[').replace('】', ']'). \
        replace(',', ',').replace('。', '.').replace(';', ';').replace('\n', '')
    # 多個空格替換為1個空格
    s = re.sub(' +', ' ', s)

    """
    將may not contain中的字符串全部轉為"+".
    """
    chars = [".", "$", "&", "*", "~", "!", "(", ")", "[", "]", "{", "}", "|", ";", "'", "\"", "`", "<", ">", "?",
             "\\", "/"]

    for char in chars:
        s = s.replace(char, flag)

    """
    判斷字符串長度是否超過需求, 若超過則截斷.
    """

    if len(s) > length:
        s = s[:length]

    """
    將may not be begin or end with中的字符串轉換為"+"
    """

    s = re.sub('(^[-_\d ])|([-_\d ]$)', flag, s)

    return s.lower()

    由于我們并沒有將所有的ABAQUS命名規則找出來, 所以該工具以后還可以工具個人的使用情況做升級. 如發現新的may not contain則在charts里面添加, 如發現新的may not be begin or end with則更改第48行的正則表達式.

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

18
6
7