guyongkun 发表于 2011-2-21 20:42:43

如何处理字符数字、非格式化与格式化数据混合文件

背景:用Patran画网格结点,只要有限元模型中的结点网格单元信息,从BDF文件中提取出来存到另一TXT文本中。(本人用于剖面刚度分析)
先贴一点BDF中信息:
==============================================
$ NASTRAN input file created by the Patran 2008r2 (MD Enabled) input
$ file translator on January   13, 2011 at 20:25:29.
$
$ Direct Text Input for Bulk Data
$ Elements and Element Properties for region : pro
PSHELL   1       1      1.       1               1
$ Pset: "pro" will be imported as: "pshell.1"
CQUAD8   1       1       1       3       11      9       2       7
         10      6
CQUAD8   2       1       3       5       13      11      4       8
         12      7
CQUAD8   3       1       9       11      19      17      10      15
         18      14
CQUAD8   4       1       11      13      21      19      12      16
         20      15
CQUAD8   5       1       17      19      27      25      18      23
         26      22
...
GRID   39             -.831   1.695    0.
GRID   40             -.838   1.765    0.
GRID   41            0.   1.625    0.
GRID   42            0.   1.66   0.
GRID   43            0.   1.695    0.
GRID   44            0.   1.73   0.
GRID*    45                           -4.99487-7      1.765
*      0.
GRID   46             .824    1.625    0.
GRID   47             .831    1.695    0.
GRID   48             .838    1.765    0.
GRID   49             1.648   1.625    0.
GRID   50             1.655   1.66   0.
...
====================================================
解决方法:
while ~feof(fp1)
    tline=fgetl(fp1);
    if strncmp(tline,'CQUAD8',6)
      tline2=fgetl(fp1);
      tline=strcat(tline,tline2);
      fprintf(fp2,'%s\r\n',tline);
      continue
    end
    if strncmp(tline,'GRID ',5)
      fprintf(fp2,'%s\r\n',tline);
      continue
    end
end
效果展示:
=====================================
CQUAD8   1       1       1       3       11      9       2       7         10      6
CQUAD8   2       1       3       5       13      11      4       8         12      7
CQUAD8   3       1       9       11      19      17      10      15         18      14
CQUAD8   4       1       11      13      21      19      12      16         20      15
CQUAD8   5       1       17      19      27      25      18      23         26      22
...
CQUAD8   360   1       1550    1552    506   508   1551    1555         507   1554
GRID   1            -8.24   1.625    0.
GRID   2            -8.2751.66   0.
GRID   3            -8.31   1.695    0.
GRID   4            -8.3451.73   0.
GRID   5            -8.38   1.765    0.
GRID   6            -7.4161.625    0.
GRID   7            -7.4791.695    0.
GRID   8            -7.5421.765    0.
GRID   9            -6.5921.625    0.
GRID   10             -6.62   1.66   0.
...
====================================================
总结:
1)去掉了Patran中的大段解释说明字符;
2)将CQUAD8 及其下一行 续接到了一起;
3)将Equivalence产生的{GRID*    45                           -4.99487-7      1.765
*      0.}行滤掉了;
4)fgetl对文件一行一行处理,理论上可以处理任何大的任一行任一列。希望抛砖引玉,灵活运用实现对
格式化和非格式数据混合、字符和数字混合的大文件进行各种操作处理。
注:上面用的MATLAB语言,其实其与C相通的
页: [1]
查看完整版本: 如何处理字符数字、非格式化与格式化数据混合文件