[go: up one dir, main page]

Menu

[r34]: / common / char2real_intel.f90  Maximize  Restore  History

Download this file

80 lines (70 with data), 1.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
subroutine char2real(string2,number)
character(120)::string,string2
character(120)::tmp
real::number
integer::signe
integer::indexTmp
string=string2
signe=1
!Remove leading characters which are not numbers !! .98 won't work
i=0
!print*,string(1:1),ichar(string(1:1))
if((ichar(string(1:1))<48).or.(ichar(string(1:1))>58)) then
i=1
do while((ichar(string(i:i))<48).or.(ichar(string(i:i))>58))
i=i+1
enddo
index1=i
else
index1=1
endif
indexTmp=index(string(1:index1),'-')
if((indexTmp<=index1).and.(indexTmp/=0)) signe= (-1)
!print*,'Then index is =',index1
do i=index1,120
string((i-index1+1):(i-index1+1))=string(i:i)
enddo
indx=scan(string,'.')
!print*,'char2real_intel',string,indx,'*'
if(indx==0) then ! c''est un entier
call char2int(string,i)
number=signe*(i)
! print*,number,'::'
return
endif
if (indx==1) then ! du type .123
i=0
goto 123
endif
tmp=string(1:indx-1)
!print*,'tmp*',tmp,'*'
!call CVTSI(tmp,i)
call char2int(tmp,i)
!write(i,*)tmp
123 continue
!print*,i
j=1
do while(string(j:j)==' ')
j=j+1
enddo
!print*,j
indx2=scan(string(j:80),' ')
!print*,'char2real2',indx,indx2
if(indx2==(indx+1)) then ! string like 152.
number=signe*float(i)
return
endif
tmp=string(indx+1:indx2)
!print*,'tmp*',tmp,'*'
!call CVTSI(tmp,j)
call char2int(tmp,j)
!write(j,*)tmp
print*,j,(float(i)+float(j)/(10)),(indx2-indx-1)
if((indx2-indx-1)/=1) then
number=signe*(float(i)+float(j)/(10)**(indx2-indx-1))
else
number=signe*(float(i)+float(j)/(10))
endif
print*,number ,':::'
return
end subroutine char2real