Fortran Coder

标题: 我想把左边的文件转换到右边的文件(如图) [打印本页]

作者: zhuangfeimeng    时间: 2016-3-8 20:22
标题: 我想把左边的文件转换到右边的文件(如图)

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


作者: zhuangfeimeng    时间: 2016-3-8 20:28
[Fortran] 纯文本查看 复制代码
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
输入文件

test1.txt

258 Bytes, 下载次数: 2


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

作者: vvt    时间: 2016-3-8 21:16
[Fortran] 纯文本查看 复制代码
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
老大就是牛,以后得多看看多学习,谢谢老大




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2