Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
implicit none real :: pitch,k,m(60000),saisyou,referline,span,mm(60000),r(60000,2) real :: e,l,el1(90000,2),el2(90000,2),elb,ras,height(90000),ri,rii,ame integer :: i,data,ios,data2 character(2) :: dirnamere character(4) :: csv character(9) :: filecsv2 character(9) :: filecsv4 character(1000) :: filename,filecsv,dirname,dirname2 character(1000) :: linebuf,linebuf2,linebuf3,s,inout print *,'算術平均粗さ(mm)を求め,算出するファイルの余分な"0"をカットします。' print *,'このプログラムでは表面の傾き,うねりを補正しません。' print *,"算術平均粗さを求めたいファイル名の入力(拡張子不要)" read *,filename !!!!!!!!!!!!!!!!!!!測定ピッチの変更はこちら!!!!!!!!!!!!!!!! pitch=2.5 !!!!!!!!!!!!!!!!!!!変更ここまで!!!!!!!!!!!!!!!!!!!!!!!!!!!! csv='.csv' filecsv=trim(adjustl(filename))//csv filecsv2='test1.csv' print *,"測定ピッチ(mm)は",pitch call chdir(dirname) open(11,file = filecsv) do i=1,60000 k=0 read(11,*,iostat=ios),k if(ios < 0)exit if(k == 0)exit m(i)=k data=i end do close(11) saisyou=0 do i=1,data saisyou=saisyou+m(i) end do referline=saisyou/data print *,"平均線は:",referline span=pitch*(data-1) print *,"測定スパン(mm)は:",span do i=1,data mm(i)=0 mm(i)=(m(i)-referline) end do open(12,file = filecsv2,status='replace') do i=1,data if( i == data )then write(linebuf,*),mm(i),',',pitch*(i-1) call del_spaces(linebuf) write(12,'(A)'),trim(linebuf) else if( (mm(i) == 0).and.(mm(i+1) == 0) )then write(linebuf,*),mm(i),',',pitch*(i-1) call del_spaces(linebuf) write(12,'(A)'),trim(linebuf) else if( (mm(i) < 0).and.(mm(i+1) < 0) )then write(linebuf,*),mm(i),',',pitch*(i-1) call del_spaces(linebuf) write(12,'(A)'),trim(linebuf) else if( (mm(i) > 0).and.(mm(i+1) > 0) )then write(linebuf,*),mm(i),',',pitch*(i-1) call del_spaces(linebuf) write(12,'(A)'),trim(linebuf) else write(linebuf,*),mm(i),',',pitch*(i-1) call del_spaces(linebuf) write(12,'(A)'),trim(linebuf) write(linebuf2,*),0,',',pitch*(i-1) call del_spaces(linebuf2) write(12,'(A)'),trim(linebuf2) end if end if end if end if end do close(12) open(13,file = filecsv2,status='old') do i=1,90000 e=0 l=0 read(13,*,iostat=ios),e,l if(ios < 0)exit el1(i,1)=e el1(i,2)=l data2=i end do close(13) el2(1,1)=el1(1,1) el2(1,2)=el1(1,2) el2(data2,1)=el1(data2,1) el2(data2,2)=el1(data2,2) do i=2,data2-1 elb=0 if( (el1(i-1,1) /= 0).and.(el1(i,1) == 0).and.(el1(i+1,1) /= 0) )then elb=abs(el1(i-1,1))/( abs(el1(i-1,1))+abs(el1(i+1,1)) ) el2(i,1)=el1(i,1) el2(i,2)=el1(i,2)+(pitch*elb) else el2(i,1)=el1(i,1) el2(i,2)=el1(i,2) end if end do filecsv4='test2.csv' open(14,file =filecsv4,status='replace') do i=1,data2 write(linebuf3,*),el2(i,1),',',el2(i,2) call del_spaces(linebuf3) write(14,'(A)'),trim(linebuf3) end do close(14) do i=1,data2-1 height(i)=el2(i+1,2)-el2(i,2) end do ras=0 do i=1,data-1 ri=0 rii=0 ri=abs(el2(i,1)) rii=abs(el2(i+1,1)) ras=ras+( ri+rii )*height(i)/2 end do ame=ras/span print *,"算術平均粗さRa(mm)は:",ame end !日本NAG fortranTip集 !http://www.nag-j.co.jp/fortran/tips/code/write-nospace-csv.f90 より引用 subroutine del_spaces(s) character (*), intent (inout) :: s character (len=len(s)) tmp integer i, j j = 1 do i = 1, len(s) if (s(i:i)==' ') cycle tmp(j:j) = s(i:i) j = j + 1 end do s = tmp(1:j-1) end subroutine del_spaces