找回密码
 注册
Simdroid-非首页
查看: 52|回复: 0

[2. C/C++/C#] 如何处理字符数字、非格式化与格式化数据混合文件

[复制链接]
发表于 2011-2-21 20:42:43 | 显示全部楼层 |阅读模式 来自 江苏南京
[1]背景:用Patran画网格结点,只要有限元模型中的结点网格单元信息,从BDF文件中提取出来存到另一TXT文本中。(本人用于剖面刚度分析)
[2]先贴一点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.
...
====================================================
[3]解决方法:
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
[4]效果展示:
=====================================
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.275  1.66     0.
GRID     3              -8.31   1.695    0.
GRID     4              -8.345  1.73     0.
GRID     5              -8.38   1.765    0.
GRID     6              -7.416  1.625    0.
GRID     7              -7.479  1.695    0.
GRID     8              -7.542  1.765    0.
GRID     9              -6.592  1.625    0.
GRID     10             -6.62   1.66     0.
...
====================================================
[5]总结:
1)去掉了Patran中的大段解释说明字符;
2)将CQUAD8 及其下一行 续接到了一起;
3)将Equivalence产生的{GRID*    45                             -4.99487-7      1.765
*        0.}行滤掉了;
4)fgetl对文件一行一行处理,理论上可以处理任何大的任一行任一列。希望抛砖引玉,灵活运用实现对
格式化和非格式数据混合、字符和数字混合的大文件进行各种操作处理。
注:上面用的MATLAB语言,其实其与C相通的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-6-11 07:14 , Processed in 0.033055 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表