读取文本文件内的指定内容,且指定内容位置不固定。
这是marc有限元生成的输出文件,我想要读取其中的points,coordinates和coonectivity并输出到另一个文件中。title job1$....MARC input file produced by Marc Mentat 2017.1.0 (64bit)
$...................................
$....input file using extended precision
extended
$...................................
sizing 0 100 121 0
alloc 25
elements 3
version 13
table 0 0 2 1 1 0 0 1
processor 1 1 1 0
$no list
all points
no echo 1 2 3
end
$...................
solver
8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
optimize 11
points
7 1.000000000000000+0 0.000000000000000+0 0.000000000000000+0
8 1.000000000000000+1 0.000000000000000+0 0.000000000000000+0
15 6.12323399573677-17 1.000000000000000+0 0.000000000000000+0
16 0.000000000000000+0 1.000000000000000+1 0.000000000000000+0
connectivity
0 0 1 0 1 1 0 0 0
1 3 12 13 2 1
2 3 13 14 3 2
3 3 14 15 4 3
4 3 15 16 5 4
5 3 16 17 6 5
6 3 17 18 7 6
7 3 18 19 8 7
8 3 19 20 9 8
9 3 20 21 10 9
10 3 21 22 11 10
11 3 23 24 13 12
12 3 24 25 14 13
13 3 25 26 15 14
14 3 26 27 16 15
15 3 27 28 17 16
16 3 28 29 18 17
17 3 29 30 19 18
18 3 30 31 20 19
19 3 31 32 21 20
20 3 32 33 22 21
21 3 34 35 24 23
22 3 35 36 25 24
23 3 36 37 26 25
24 3 37 38 27 26
25 3 38 39 28 27
26 3 39 40 29 28
27 3 40 41 30 29
28 3 41 42 31 30
29 3 42 43 32 31
30 3 43 44 33 32
31 3 45 46 35 34
32 3 46 47 36 35
33 3 47 48 37 36
34 3 48 49 38 37
35 3 49 50 39 38
36 3 50 51 40 39
37 3 51 52 41 40
38 3 52 53 42 41
39 3 53 54 43 42
coordinates
3 121 0 1
1 1.000000000000000+0 0.000000000000000+0 0.000000000000000+0
2 9.894434504817674-1 1.449194890231615-1 0.000000000000000+0
3 9.558632461069742-1 2.938119377115879-1 0.000000000000000+0
4 8.973756499953726-1 4.412674277525846-1 0.000000000000000+0
5 8.138260360510751-1 5.811085811149188-1 0.000000000000000+0
6 7.071067811865476-1 7.071067811865476-1 0.000000000000000+0
7 5.811085811149190-1 8.138260360510753-1 0.000000000000000+0
8 4.412674277525846-1 8.973756499953726-1 0.000000000000000+0
9 2.938119377115880-1 9.558632461069740-1 0.000000000000000+0
10 1.449194890231618-1 9.894434504817674-1 0.000000000000000+0
11 2.18241585825745-16 1.000000000000000+0 0.000000000000000+0
12 1.090000000000000+0 0.000000000000000+0 0.000000000000000+0
13 1.084510927125266+0 1.644918453121334-1 0.000000000000000+0
14 1.055554855713800+0 3.346644660942546-1 0.000000000000000+0
15 1.001024805998978+0 5.045632331609336-1 0.000000000000000+0
16 9.205406158528394-1 6.672928710563322-1 0.000000000000000+0
17 8.157933208433636-1 8.157933208433636-1 0.000000000000000+0
18 6.672928710563322-1 9.205406158528392-1 0.000000000000000+0
19 5.045632331609336-1 1.001024805998978+0 0.000000000000000+0
20 3.346644660942547-1 1.055554855713800+0 0.000000000000000+0
21 1.644918453121337-1 1.084510927125266+0 0.000000000000000+0
22 2.38263630459991-16 1.090000000000000+0 0.000000000000000+0
23 1.360000000000000+0 0.000000000000000+0 0.000000000000000+0
24 1.369079850267447+0 2.230784887064253-1 0.000000000000000+0
25 1.353397582474839+0 4.567171493297264-1 0.000000000000000+0
26 1.310237337466211+0 6.933911694047396-1 0.000000000000000+0
27 1.238603116154034+0 9.241649010673230-1 0.000000000000000+0
28 1.139630472961694+0 1.139630472961694+0 0.000000000000000+0
29 9.241649010673232-1 1.238603116154034+0 0.000000000000000+0
30 6.933911694047396-1 1.310237337466211+0 0.000000000000000+0
31 4.567171493297264-1 1.353397582474839+0 0.000000000000000+0
32 2.230784887064256-1 1.369079850267447+0 0.000000000000000+0
33 2.98329764362728-16 1.360000000000000+0 0.000000000000000+0
34 1.810000000000000+0 0.000000000000000+0 0.000000000000000+0
35 1.841260224163052+0 3.202903095818325-1 0.000000000000000+0
36 1.845732994462190+0 6.584708021329012-1 0.000000000000000+0
37 1.819880532730269+0 1.004616824864984+0 0.000000000000000+0
38 1.761870476949361+0 1.346763444054014+0 0.000000000000000+0
39 1.672063491925692+0 1.672063491925692+0 0.000000000000000+0
40 1.346763444054014+0 1.761870476949361+0 0.000000000000000+0
define node set apply1_nodes
11 22 33 44 55 66 77 88 99 110 121
define node set apply2_nodes
1 12 23 34 45 56 67 78 89 100 111
define edgemt set apply3_edges
96:0 to 100:0
对 marc 不了解。
你得先确定,你要读取的这些数据,是多少个?
个数是确定的,不变的。还是需要从输出文件的前面获得,比如
sizing 0 100 121 0
alloc 25
elements 3
他们是否和后面的数据的个数有关系? fcode 发表于 2020-3-16 18:01
对 marc 不了解。
你得先确定,你要读取的这些数据,是多少个?
个数是确定的,不变的。还是需要从输出文件 ...
从“sizing”可以获得该模型有100个单元,121个节点。后面的内容,因为限制字数我就删掉了些。所以就是从文件中读取这121个节点的坐标,输出来放到另外一个文件中。我想把他们先读到数组中,再输出到另一个文件的坐标的位置会方便点。 所以,你并没有回答我“如何确定points,coordinates和coonectivity的大小” fcode 发表于 2020-3-16 22:10
所以,你并没有回答我“如何确定points,coordinates和coonectivity的大小”
不好意思,可能是我的表述有问题。
从“sizing”中看出100个单元和121个节点可以。connectivity就是有100X6(100行,6列)。coordinates就是121个节点的坐标,121X4(121行,4列)。假如sizing这样写:0 4 9 0connectivity就是有4X6(4行,6列)。coordinates就是9个节点的坐标,9X4(9行,4列)。图中的connectity和coordianates紧挨着的下面一行是不需要读取的,就是跳过这一行开始读取数据,
connectity和coordianates都是根据sizing中来变的。然后我现在想把connectity和coordianates输出到另外一个文件中,用什么方法?不用读points了。感谢回答。我真的很高兴。
1983807267
Program www_fcode_cnimplicit none
Character(len=512) :: cStr
integer :: k , nUnit = 0 , nNode = 0
Character(len=*) , parameter :: C_SIZING = 'sizing' , &
C_POINTS = 'points' , &
C_CONNECTIVITY = 'connectivity' , &
C_COORDINATES= 'coordinates'
integer , allocatable :: connectivity(:,:)
real , allocatable :: coordinates(:,:)
Open(12,File="model1_job1.dat")
Do
read(12,'(a512)',ioStat=k) cStr
if(k/=0) exit
cStr = adjustl(cStr)
if( cStr(:len(C_SIZING)) == C_SIZING ) then
read(cStr,*) cStr , k , nUnit , nNode
else if( cStr(:len(C_POINTS)) == C_POINTS ) then
!//此处可读取points
else if( cStr(:len(C_CONNECTIVITY)) == C_CONNECTIVITY ) then
read(12,'(a512)',ioStat=k) cStr
if(k/=0) exit
if( nUnit <= 0 ) cycle
Allocate( connectivity(6,nUnit) )
read(12,*) connectivity
else if( cStr(:len(C_COORDINATES)) == C_COORDINATES ) then
read(12,'(a512)',ioStat=k) cStr
if(k/=0) exit
if( nNode <= 0 ) cycle
Allocate( coordinates(4,nNode) )
read(12,*) coordinates
end if
End Do
Close(12)
Open(12,File="out.txt")
Do k = 1 , size(connectivity,2)
write(12,*) connectivity(:,k)
End Do
Do k = 1 , size(coordinates,2)
write(12,*) coordinates(:,k)
End Do
Close(12)
End Program www_fcode_cn 谢谢你的程序,新手刚学,还要时间理解代码的意思。我现在需要把marc这个有限元文件的格式做修改,大致改三个地方,就是从文件1(model1_job1)里面的sizing读出单元数,节点数,然后写成文件二的control parameter的格式。从文件1(model1_job1)读出connectivity和coordinates,然后写成文件2的connectivity和coordinates格式。这个程序,相当于一个接口,把文件1的格式变成文件2的格式。之前您教我写的程序是把它们读出来,单独放到了一个文件里。现在不仅需要读出来,还要放到输出文件的指定位置。我很愚笨,这个问题该怎么写?不胜感激。
这是文件2的格式;
version 1.2(不用修改)
Solution type(不用修改)
1
Solution CPU cores(不用修改)
8
CONTROL PARAMETER
13 模型节点数 (要读取来修改)
4, 8, 16, 2, 1 1.模型单元数(要读取来修改);2.最大边数;3.最大内边数(内节点数);4.材料类型总数;5.边界条件总数。(2,3,4,5项我也不知道怎么修改,就不改了。)
OPTION(不用修改)
1, 0, 0, 3, 0
MATERIALS(不用修改)
1 模型厚度
1, 0, 1.材料编号;2.材料种类(0:表示复合材料;1:表示均匀材料)
72000, 0.33, 700000, 14500 基体材料参数:弹性模量EO,泊松比VO,屈服应力YEILD_STRESS,切向弹性模量ET
430000, 0.25, 1e+08, 50000 夹杂材料参数:弹性模量EO,泊松比VO,屈服应力YEILD_STRESS,切向弹性模量ET
9.7 界面临界法向应力
OUTPUT PARAMETER (不用修改)
1, 0, 0, 0, 0
CONNECTIVITY (要读取来修改)
1, 4, 1, 2, 5, 4, 0, 0, 0, 0, 1, 1
2, 5, 4, 5, 13, 8, 7, 0, 0, 0, -1, 2
3, 5, 2, 3, 6, 10, 5, 0, 0, 0, -1, 1
4, 8, 5, 10, 6, 11, 9, 12, 8, 13, -1, 2
COORDINATES (要读取来修改)
1, -1, (x) 1(y)
2, -1, 0
3, -1, -1
4, 0, 1
5, 0, 0
6, 0, -1
7, 1, 1
8, 1, 0
9, 1, -1
10, 0, -0.5
11, 0.5, -1
12, 1, -0.5
13, 0.5, 0
页:
[1]
2