主题:字符串与数值型的问题
bellanchor
[专家分:0] 发布于 2010-07-21 13:19:00
如果我有一个字符串,‘1990 189 123’
我想在不指定第几个字符的情况下,让它转换成3个整型值,应该怎么做?求教,谢谢
回复列表 (共9个回复)
沙发
f2003 [专家分:7960] 发布于 2010-07-21 13:41:00
那就需要程序能判断空格的位置。我的想法是:
首先利用f90的字符内部函数scan()判断空格的位置,把这个字符串分解为子字符串,
subroutine decomposeChar(origChar, separater, number, decomposedChar)
implicit none
character(len=*), intent(in) :: origChar
character(len=1), intent(in) :: separater
character(len=*), intent(out) :: decomposedChar
integer, intent(in) :: number
character(len=len(origChar)) :: origCharCopy
integer :: loc, i
origCharCopy=origChar
! 这里的代码去除字符串开头的separater
do i=1, len(origCharCopy)
if (origCharCopy(1:1) == separater) then
origCharCopy = origCharCopy(2:len(origCharCopy))
else
exit
endif
enddo
! 用挤牙膏的方式,一个一个地把字符串挤出来
do i=1,number
loc = scan(origCharCopy, separater)
if (loc == 0) then
decomposedChar = trim(origCharCopy)
else
decomposedChar = origcharCopy(1:loc-1)
! print *, trim(decomposedChar)
origCharCopy = origCharCopy(loc+1: len(origCharCopy))
endif
enddo
end subroutine
然后,将这些子字符串转换为整型。字符串是可以作为fortran内部文件的,用read语句即可读到整型变量中。
character(len=128) :: char='123'
integer :: x
read (unit=char, fmt='(i8)') x
板凳
bellanchor [专家分:0] 发布于 2010-07-21 13:54:00
谢谢了,不过有点儿麻烦啊。。。我试试吧
3 楼
academician [专家分:40] 发布于 2010-07-21 16:18:00
PROGRAM MAIN
IMPLICIT NONE
CHARACTER*32 A
INTEGER B,C,D
A='1990 189 123'
READ(A,*)B,C,D
WRITE(*,*)B
WRITE(*,*)C
WRITE(*,*)D
END
4 楼
academician [专家分:40] 发布于 2010-07-21 16:18:00
我觉得上面那个是~稍微~有点麻烦
5 楼
bellanchor [专家分:0] 发布于 2010-07-21 17:07:00
ls的朋友,那假如我文件里有一行是‘1990 123 1324’这样的东西,我想要把它们读成一整个字符串可以吗?因为我现在的这个文件每一行的东西不同,但是开头的都是数字,如果开头的是1990我就把它放到一个文件里面,如果不是我就放进另一个文件里面
6 楼
cgl_lgs [专家分:21040] 发布于 2010-07-21 18:06:00
read(fid,'(A512)')LineBuff
LineBuff长度要大于512。
然后可以:
Read(LineBuff,*)NYear
If (NYEAR.EQ.1990) Then
....
End If
7 楼
asymptotic [专家分:16630] 发布于 2010-07-22 00:21:00
3 楼 academician 网友的基本想法正确,下面是我随手的程序:
subroutine ReadString
implicit none
integer:: i, j, k
character(len = 100):: str
integer:: IU
open (unit = 15, file = "In05.dat")
open (unit = 21, file = "Data1990.dat")
open (unit = 22, file = "Data1234.dat")
do while ( .true. )
read(unit = 15, fmt = *, end = 20) str
read(str, fmt = *) i, j, k
if ( i == 1990 ) then
IU = 21
else
IU = 22
end if
write(unit = IU, fmt = *) i, j, k
write(unit = *, fmt = *) i, j, k
end do
20 close(15)
return
end subroutine
输入文件:
'1990 189 123'
'1990 18923 123'
'1990 189 1234567890'
'1990 123489 123456789'
'1990 1894567 123457890'
'1991 1895637 127890'
'1991 1795637 127893'
不过,我觉得您这些字符串还有更简单的办法,先在文本文档中把 替换 ' ' 和 " "
成空格,这样就可以直接读取数据了。
一句话,怎么样简单 就 怎样处理。
8 楼
妖精不还 [专家分:0] 发布于 2010-07-25 15:30:00
注册表中性能计数器名称字符串数值的格式不正确。不正确的字符串是2278,不正确的索引值是数据节中的第一个DWORD值,最后的有效索引值是数据节中的第二个和第三个DWORD值。有关更多信息,请参阅在的帮助和支持中心。如何修复?什么原因引起的重要?
9 楼
与春不觉晓 [专家分:0] 发布于 2010-07-25 17:19:00
注册表中性能计数器名称字符串数值的格式不正确。不正确的字符串是2278,不正确的索引值是数据节中的第一个DWORD值,最后的有效索引值是数据节中的第二个和第三个DWORD值。有关更多信息,请参阅在的帮助和支持中心。如何修复?什么原因引起的重要?
我来回复