zhuangfeimeng 发表于 2016-3-8 20:22:30

我想把左边的文件转换到右边的文件(如图)


已经写的部分代码,欢迎大神们跟帖

zhuangfeimeng 发表于 2016-3-8 20:28:22

program example
implicit none
character(len=64)::str
integer::a,b,ierr,i,c,d
open(10,file='test1.txt')
open(11,file='test2.txt')
    do
      read(10,"(a64)",iostat=ierr) str
      if(ierr/=0) exit
      if(index(str,'*Nset')==ierr.and.index(str,'instance')/=ierr)then         
      write(11,'(a)')str((index(str,'nset')+5):(index(str,'instance')-2))
      read(str,*)c
      write(11,*)c
      else
      end if   
   end do

!      endif
!      if (str(1:17)=='*Nset, nset=Set-1') then
!            read(10,*) a
!      end if
!      if (str(1:17)=='*Nset, nset=Set-2') then
!            read(10,*) b
!      end if
!      if(str(1:9)=='*Boundary')then
!      do
!      read(str(:),*,iostat=ierr)c,d      
!      if(ierr/=0) exit
!          if(d<=3)then
!          write(11,"(i1,3x,a2,i1)")a,'TR',d
!          end if
!          if(3<d)then
!          write(11,"(i1,3x,a2,i1)")b,'TR',d
!          end if
!      end do
!      end if
close(10)
close(11)
end program example

zhuangfeimeng 发表于 2016-3-8 20:29:21

输入文件

zhuangfeimeng 发表于 2016-3-8 20:35:27

图片里的意思就是1.把*Boundary下方的set-n集合替换上方的具体数值(节点),集合的名称不具有普遍性,需要*Nset和instance那行和下方的节点    2.set-n后面的数值在1-6之间(自由度)

vvt 发表于 2016-3-8 21:16:08

Program www_fcode_cn
Implicit None
Character (Len=64) :: str
Integer :: ierr, i , j
Type NSET
    Character(len=8)      :: cName
    Integer               :: iFreed
    Type(NSET) , pointer:: Next
End Type NSET
Type ( NSET ) , pointer :: lFirst => NULL() , p => NULL()
Open (10, File='test1.txt')
Open (11, File='test2.txt')
Do
    Read (10, '(a64)', Iostat=ierr) str
    If (ierr/=0) Exit
    If (index(str,'*Nset')>0 .And. index(str,'instance')>0 ) Then
       If ( Associated( lFirst ) ) then
         allocate( p%Next )
         p => p%Next
       Else
         Allocate( lFirst )
         p => lFirst
       End If
       i = index( str , "nset=" ) + 4
       j = index( str(i:) , "," ) + i - 1
       p%cName = str(i+1:j-1)
       Read( 10 , * ) p%iFreed
    End If
    If ( str(1:9) == "*Boundary" ) exit
End Do
write( 11 , '(a)' ) "*Boundary"
Do
    Read (10 , * , Iostat=ierr) str , i
    If (ierr/=0) Exit
    p => lFirst
    Do
      If ( .NOT.Associated(p) ) exit
      If ( str == p%cName ) Exit
      p => p%Next
    End Do
    Write( 11 , '(g0,1x,a,g0)' ) p%iFreed , "TR" , i
End Do
Close (10)
Close (11)
End Program www_fcode_cn

zhuangfeimeng 发表于 2016-3-8 21:24:36

老大就是牛,以后得多看看多学习,谢谢老大:-victory:
页: [1]
查看完整版本: 我想把左边的文件转换到右边的文件(如图)