Ansys中的字符串操作

ANSYS的字符串操作可以使我们的命令流变得优雅而高效,然而无论在帮助系统中还是在很多教材中这部分内容都缺少示例性的说明。当然,如果仔细阅读帮助系统是可以完全掌握字符串操作的,那么你会象我一样浪费很多时间。显然,本篇主旨就是想让您完全掌握字符串操作,却花比我少得多的时间。

本篇内容来源:
[1] 3.2. Defining Parameters of ANSYS Parameter Design Language Guide (help/ans_apdl/Hlp_P_APDL3_3.html)
[2] 3.10. Array Parameters of ANSYS Parameter Design Language Guide (help/ans_apdl/Hlp_P_APDL3_11.html)
[3] blog.ansys.net/2009/09/29/how-to-parse-text-with-numbers-and-string/
[4] www.padtinc.com/blog/the-focus/manipulating-text-strings-in-ansys-mechanical-apdl

字符参数与字符串

字符串有两种形式:字符参数(character parameter)和字符数组(string array)。字符串参数不需要用指标访问,也不必用dim定义。缺点是受限于8个字符。可以用parameter=method方式定义字符参数:
myChr=‘yeehah’
如果用
dim来定义字符参数数组当然也是可以的,比如定义一个二维字符数组:

    *DIM,filename,CHAR,3,2
    filename(1,1)='job1' $ filename(1,2)='txt'
    filename(2,1)='job2' $ filename(2,2)='jpg'
    filename(3,1)='job3' $ filename(3,2)='db'
    parsav,all,text,parm

之所以输出text.parm,是因为字符串无法在*status或array parameters窗口观看。打开text.parm就可以看到上述代码定义的字符串数组filename。需要注意的是,CHAR数组每个元素不能超过8个字符。事实上,如果仔细看看text.parm,filename数组每个元素的大小恰好为8。

为了使代码更健壮,避免大小限制,可使用字符串数组,用*dim来声明:
*DIM,myString,STRING,80
这条语句声明了一个字符串数组,有80个字符长度。一旦生成了字符串数组,就需要使用名字和起始指标来引用。如:

   /title,Working on Model %myString(1)%

而对于字符参数,则不需要使用指标:

   /title,Working on Model %myChr%

在APDL中关于字符串数组应该知道的包括:
字符串数组可以是二维的,这样如果你想将大量文字放在一起就可以轻松做到,例如:

   *dim,comp,string,80,3
   comp(1,1)='leftside'
   comp(1,2)='rightside'
   comp(1,3)='topside'
   *do,i,1,3
      cmsel,a,%comp(1,i)%
   *enddo
  • 将文字赋与字符串值时应用使用单引号
  • 最长的字符串为256个字符
  • 要看到字符串数组和参数,使用命令*stat

文件读取

如果想从文本文件中读取CHAR数组,其方式与读取数值数组是一样的。假定我们有一个文本文件name.txt,其内容为:

job1 txt
job2 jpg
job3  db

用*vread命令可以读入CHAR数组,示例代码如上:

    /inquire,my_lines,lines,name,txt
    *dim,filename,char,my_lines,2
    *vread,filename,name,txt,,jik,2,my_lines
    (2A4)
    parsav,all,text,parm

如果想从文本文件中读取STRING数组,方式要简单得多,用*sread命令:

    *dim,filename,string
    *sread,filename,name,txt

这个时候读入的数组内容是:
filename(1,1)内容为job1 txt
filename(1,2)内容为job2 jpg
filename(1,3)内容为job3 db

在这个示例中有三点令人吃惊:

(1) STRING数组定义其实是不必定义大小的,它会在读入文本时自动确定所需维数。
(2) 虽然STRING数组的索引一定使用起始指标,然而在读入时却不必使用指标。
(3) 每行文字按顺序存入数组的列,数组行数取为可容纳最多行字符的8的倍数。(比如第一行含9个字符,则filename的行数变为16,相应所有列的维数为16)

我们还需要注意CHAR数组与STRING数组的重要区别:CHAR数组的单元(也就是最小单位)是一个不超过8个字符的字符串,而STRING数组的单元是一个字符。

1 个赞