输出文件:vqimwr@163.com.txt 感谢原作者vqimwr

源代码如下:
program www_fcode_cn
implicit none
integer:: i,j,k
integer:: i_ReadingState
integer:: i_DataRows,i_DataCols
integer:: i_TableWidth
integer:: i_Start,i_End
logical:: l_exist
character(len=120):: s_CalvariaLine,s_NeckLine,s_BodyLine,s_SoleLine
character(len=120):: s_TemplateHeadLine,s_TemplateDataLine
character(len=120):: s_Temp
character(len=80)::s_format
character(len=120),allocatable:: s_Data(:,:)
character,allocatable:: s_TableHead(:)
integer,allocatable:: i_DataWidth(:,:),i_DataHigh(:,:)
integer,allocatable:: i_ColumnWidth(:)
integer,allocatable:: i_StartPos(:)
integer,allocatable:: i_LeftPos(:),i_RightPos(:)
inquire(file="原始数据.txt",exist=l_exist)
if(.not.l_exist) then
write(*,*) "找不到输入数据的文件——“原始数据.txt”,程序已终止,回车退出DOS界面! "
read(*,*)
stop
end if
open(1,file="原始数据.txt")
open(2,file="vqimwr@163.com.txt")
read(1,"(A120)",iostat=i_ReadingState) s_Temp
i_DataCols=0
if((s_Temp(1:1)/=" ".and.s_Temp(1:1)/=" ").and.&
&(s_Temp(2:2)==" ".or.s_Temp(2:2)==" ".or.s_Temp(2:3)==" ")) then
i_DataCols=i_DataCols+1
end if
do k=2,len(trim(s_Temp))-2
if((s_Temp(k:k)/=" ".and.s_Temp(k:k)/=" ".and.s_Temp(k-1:k)/=" ").and.&
&(s_Temp(k+1:k+1)==" ".or.s_Temp(k+1:k+1)==" ".or.s_Temp(k+1:k+2)==" ")) then
i_DataCols=i_DataCols+1
end if
end do
i_DataCols=i_DataCols+1
i_DataRows=1
do while(.true.)
read(1,"(A120)",iostat=i_ReadingState) s_Temp
if(i_ReadingState/=0) exit
i_DataRows=i_DataRows+1
end do
allocate(s_data(i_DataRows,i_DataCols),i_DataWidth(i_DataRows,i_DataCols),i_DataHigh(i_DataRows,i_DataCols))
allocate(i_LeftPos(i_DataCols),i_RightPos(i_DataCols),i_ColumnWidth(i_DataCols),i_StartPos(i_DataCols))
rewind(1)
do i=1,i_DataRows
read(1,"(A120)") s_Temp
if(s_temp(1:1)==" ") s_temp(1:1)=" "
do k=2,len_trim(s_Temp)
if(s_temp(k:k)==" ") then
s_temp(k:k)=" "
elseif(s_temp(k-1:k)==" ") then
s_temp(k-1:k)=" "
end if
end do
j=1
if(s_temp(1:1)/=" ") i_LeftPos(j)=1
do k=2,Len_trim(s_Temp)
if(s_temp(k-1:k-1)/=" ".and.s_temp(k:k)==" ") then
i_RightPos(j)=k-1
i_DataWidth(i,j)=i_RightPos(j)-i_LeftPos(j)+1
s_Data(i,j)=s_Temp(i_LeftPos(j):i_RightPos(j))
j=j+1
elseif(s_temp(k-1:k-1)==" ".and.s_temp(k:k)/=" ") then
i_LeftPos(j)=k
end if
end do
i_RightPos(j)=Len_trim(s_Temp)
i_DataWidth(i,j)=i_RightPos(j)-i_LeftPos(j)+1
s_Data(i,j)=s_Temp(i_LeftPos(j):i_RightPos(j))
end do
s_CalvariaLine(1:2)="┏"
s_NeckLine(1:2)="┣"
s_BodyLine(1:2)="┠"
s_SoleLine(1:2)="┗"
s_TemplateDataLine(1:2)="┃"
i_TableWidth=2
do j=1,i_DataCols
i_ColumnWidth(j)=i_DataWidth(1,j)
do i=2,i_DataRows
if(i_DataWidth(i,j)>i_ColumnWidth(j)) i_ColumnWidth(j)=i_DataWidth(i,j)
end do
if(mod(i_ColumnWidth(j),2)/=0) then
i_ColumnWidth(j)=i_ColumnWidth(j)+1
end if
i_TableWidth=i_TableWidth+i_ColumnWidth(j)+2
do k=i_TableWidth-i_ColumnWidth(j)-1,i_TableWidth-2,2
s_CalvariaLine(k:k+1)="━"
s_NeckLine(k:k+1)="━"
s_BodyLine(k:k+1)="─"
s_SoleLine(k:k+1)="━"
s_TemplateDataLine(k:k+1)=" "
end do
s_CalvariaLine(i_TableWidth-1:i_TableWidth)="┯"
s_NeckLine(i_TableWidth-1:i_TableWidth)="╇"
s_BodyLine(i_TableWidth-1:i_TableWidth)="┼"
s_SoleLine(i_TableWidth-1:i_TableWidth)="┷"
s_TemplateDataLine(i_TableWidth-1:i_TableWidth)="│"
end do
s_CalvariaLine(i_TableWidth-1:i_TableWidth)="┓"
s_NeckLine(i_TableWidth-1:i_TableWidth)="┫"
s_BodyLine(i_TableWidth-1:i_TableWidth)="┨"
s_SoleLine(i_TableWidth-1:i_TableWidth)="┛"
s_TemplateDataLine(i_TableWidth-1:i_TableWidth)="┃"
write(s_format,"(A2,A1,i2,A2)") "(","A",i_TableWidth,")"
i_StartPos(1)=3
do j=2,i_DataCols
i_StartPos(j)=i_StartPos(j-1)+i_ColumnWidth(j-1)+2
end do
write(2,s_format) Trim(s_CalvariaLine)
do i=1,i_DataRows
s_Temp=s_TemplateDataLine
do j=1,i_DataCols
i_Start=i_StartPos(j) +(i_ColumnWidth(j)-i_DataWidth(i,j))/2
i_End=i_Start+i_DataWidth(i,j)-1
s_Temp(i_Start:i_End)=trim(s_Data(i,j))
end do
write(2,s_format) s_Temp
if( i < i_DataRows ) then
write( 2 , s_format ) Trim(s_BodyLine)
end if
end do
write(2,s_format) Trim(s_SoleLine)
close(1)
close(2)
end program www_fcode_cn



