24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1725  |  回复: 23

xk6891

至尊木虫 (著名写手)


[交流] 【求助】如何实现数字紧贴字母输入

H  1
H  2
H  3
H  4
H  5
H  6
H  7
H  8
H  9
H 10
H 11
H 12
请教前辈,如何让后面的数字紧贴着字母输入呢后面还有几百行
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

uiui

新虫 (小有名气)


★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
xk6891(金币+5):谢谢前辈,问题解决了。用了第二种方法 2011-01-12 10:32:06
余泽成(金币+3):谢谢参与应助! 2011-01-13 19:47:34
program align_left_output_1
  
   do i=1,200
      L=int(log10(i*1.0))+1
      write(*,100) i
   enddo
   100 format('H'I

end program


program align_left_output_2
   character*8 tmpchar

   do i=1,200
      write(tmpchar,'(I8)') i
      write(*,*) 'H'//adjustl(tmpchar)
   enddo

end program

第一种方法形式简单,容易理解。但变宽度输出依赖于编译器,可移植性不好;而且用到了对数运算,在数据量很大时效率较低。
第二种方法借用了临时字符串做内部文件,效率可能更高一些。
2楼2011-01-12 09:17:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by uiui at 2011-01-12 09:17:49:
program align_left_output_1
  
   do i=1,200
      L=int(log10(i*1.0))+1
      write(*,100) i
   enddo
   100 format('H'I

end program


program align_left_output_2
   charact ...

请教前辈一个问题,call random_seed产生随机数的时候,网上说的会根据系统的日期和时间提供种子,但是我每次编译都没有改变,求教一下这是为何,如何使它能生成不同的随机数列。
3楼2011-01-12 10:37:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

uiui

新虫 (小有名气)



小木虫(金币+0.5):给个红包,谢谢回帖交流
在call random_seed时不要加参数
4楼2011-01-12 13:49:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by uiui at 2011-01-12 13:49:20:
在call random_seed时不要加参数

没有加参数call random_seed()就放这儿了,每次产生的那些数都一样
5楼2011-01-12 14:13:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xioooli

金虫 (小有名气)



小木虫(金币+0.5):给个红包,谢谢回帖交流
xk6891(金币+5):3Q,会程序就是好啊,也在摸索~~ 2011-01-13 10:14:00
CODE:
sed -i 's| *||g' file

6楼2011-01-12 20:44:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by xioooli at 2011-01-12 20:44:29:
CODE:
sed -i 's| *||g' file


我很菜,对这个不懂,这个是用在perl还是shell里面—sed和awk
7楼2011-01-13 08:49:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xioooli

金虫 (小有名气)


★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+2): 谢谢参与应助! 2011-01-19 12:39:02
引用回帖:
Originally posted by xk6891 at 2011-01-13 08:49:44:

我很菜,对这个不懂,这个是用在perl还是shell里面—sed和awk

你的文件如果都输出好了,并且保存在 file 里面的话,到 shell 里面运行这个命令就搞定。
8楼2011-01-13 09:44:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by xioooli at 2011-01-13 09:44:55:

你的文件如果都输出好了,并且保存在 file 里面的话,到 shell 里面运行这个命令就搞定。

谢谢你啊,哈哈
9楼2011-01-13 10:13:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by uiui at 2011-01-12 13:49:20:
在call random_seed时不要加参数

请教个问题,用fortran读取文件编译通过,但是读取的时候出现这个错误“Fortran runtime error: End of file”,贴上说在文本的最后敲enter,但是没解决(昨天成功读取了,今天又不行了)
参考的是这个帖子http://muchong.com/bbs/viewthread.php?tid=2760897里面的code
10楼2011-01-13 10:19:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+2): 谢谢参与应助! 2011-01-19 12:39:23
引用回帖:
Originally posted by xk6891 at 2011-01-13 10:19:56:

请教个问题,用fortran读取文件编译通过,但是读取的时候出现这个错误“Fortran runtime error: End of file”,贴上说在文本的最后敲enter,但是没解决(昨天成功读取了,今天又不行了)
参考的是这个帖子[ur ...

在 read 中加一个选项,告诉程序当遇到 end of file 时干什么……
11楼2011-01-13 10:25:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by snoopyzhao at 2011-01-13 10:25:59:


在 read 中加一个选项,告诉程序当遇到 end of file 时干什么……

还是不明白,您能否再细致明示一下,是read(……)括号当中的什么选项。
这个帖子http://forum.simwe.com/viewthread.php?tid=852737有时候成功,我把里面第一个程序中read(100)改成了*,昨天成功了几次,但是修改成要读我的数据数目时,就失败了,没看懂

[ Last edited by xk6891 on 2011-1-13 at 11:15 ]
12楼2011-01-13 11:09:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by xk6891 at 2011-01-13 11:09:00:

还是不明白,您能否再细致明示一下,是read(……)括号当中的什么选项。
这个帖子http://forum.simwe.com/viewthread.php?tid=852737有时候成功,我把里面第一个程序中read(100)改成了 ...

这个论坛我访问不了,没有帐号,呵呵……

你把你的问题在这里描述一下……
13楼2011-01-13 11:21:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by snoopyzhao at 2011-01-13 11:21:43:


这个论坛我访问不了,没有帐号,呵呵……

你把你的问题在这里描述一下……

这是帖子上的内容
说明:我不知道你的文件里面的具体格式,所以只能用格式语句100来表示了,具体自己弄吧。我下面这个程序是把文件里面的所有数据都读取出来,然后用了一个do循环,将你要的第三列数据赋值给了b数组,不知道是不是你想要的。implicit real*8 (a-h,o-z)

dimension a(3,7),b(3,1)



open (1,file='shuju.dat',form='formatted',status='unknown')

do i=1,3

   read (1,100) (a(i,j),j=1,7)

end do

close (1)



do i=1,3

   b(i,1)=a(i,3)

end do



end
复制代码

为的是读取这组数据中的第三列
例如这样一个文件:
1 2 3 4 5 u 1
2 3 6 5 x 55 2
2 3 6 9 5 4  5
如果只想读入其中第三列,也就是第三个空格(backspace)处的数字,如何实现呢? 谢谢!!!
对于fortran对文本数据操作没有看懂,觉得文本操作时read write里面很多选项,但是貌似作用不大,是这样么

[ Last edited by xk6891 on 2011-1-13 at 11:30 ]
14楼2011-01-13 11:28:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


内容已删除
15楼2011-01-13 11:44:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小木虫(金币+0.5):给个红包,谢谢回帖交流
xk6891(金币+8):谢谢专家的帮助,小生感激不尽~~ 2011-01-13 13:44:48
CODE:
program main
real a,b
dimension a(3,7),b(3,1)

open (17,file='data.dat',status='old')
do i=1,3
   read (17,*) (a(i,j),j=1,3)
end do
close (17)

open (18,file='fort.13',status='unknown')
do i=1,3
   b(i,1)=a(i,3)
   write(18,*)b(i,:)
end do
close(18)
end

16楼2011-01-13 13:27:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by snoopyzhao at 2011-01-13 13:27:

谢谢专家了,感激不尽,问题得到解决,fortran会读数据了。
这种页面插入代码如何做到的
能请您介绍一些shell或perl方面的入门资料么,貌似在shell语言中的awk和sed处理数据文本更强大,还请前辈指导。
17楼2011-01-13 13:43:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小木虫(金币+0.5):给个红包,谢谢回帖交流
这样写可能更 fortran 90 一些,呵呵……
CODE:
program main
   implicit none
   integer, dimension(3) :: b
   integer :: i, ios
   character(len=80) :: line
   
   open (17,file='data.dat',status='old')
   open (18,file='fort.13',status='unknown')
   
   i=0
   do
   i=i+1
     read(unit=17,fmt='(a)', iostat=ios) line
     if (ios < 0) exit
     read(line,'(4X,I1)') b(i)
     write(18,*) b(i)
   enddo

end program main

18楼2011-01-13 13:50:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+5):辛苦了! 2011-01-13 19:48:21
引用回帖:
Originally posted by xk6891 at 2011-01-13 13:43:30:

谢谢专家了,感激不尽,问题得到解决,fortran会读数据了。
这种页面插入代码如何做到的
能请您介绍一些shell或perl方面的入门资料么,貌似在shell语言中的awk和 ...

code 前后加
CODE:
,code 后加

即可。

另外,我从来没有说过我会 shell 或 perl,呵呵……
19楼2011-01-13 13:53:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


引用回帖:
Originally posted by snoopyzhao at 2011-01-13 13:53:32:



code 前后加
CODE:
,code 后加

即可。

另外,我从来没有说过我会 shell 或 perl,呵呵……

CODE:
code前后加,我也试一试

[code]
code前后加,我也试一试
[code]
呵呵,我就是问问,感觉程序强人一般神马都懂,呵呵,那Fortran除了经常看的彭国伦的还有谁的资料不错么想看一看
20楼2011-01-13 14:14:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by xk6891 at 2011-01-13 14:14:43:

呵呵,我就是问问,感觉程序强人一般神马都懂,呵呵,那Fortran除了经常看的彭国伦的还有谁的资料不错么想看一看

我觉得 90 的话,入门可以看 “fortran 90 编程指南”,袁驷,叶康生译,高等教育出版社出版的。但有些术语可能翻译的比较别扭……
21楼2011-01-13 19:59:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


★ ★
jjdg(金币+2): 感谢参与 2011-06-17 22:09:03
引用回帖:
Originally posted by snoopyzhao at 2011-01-13 19:59:40:


我觉得 90 的话,入门可以看 “fortran 90 编程指南”,袁驷,叶康生译,高等教育出版社出版的。但有些术语可能翻译的比较别扭……

好的,找来看一看

fortran对于格式的要求很严格,刚开始读取数据的时候出现的是
At line 10 of file tiH.f90 (unit = 17, file = 'wa_xyz.dat')
Fortran runtime error: End of file
这个错误修改之后,对于读取和写入数据采取不同的格式之后,看出了问题所在,下面是
[code:]
program main
implicit none
integer i,j
character B
real A
dimension B(768),A(768,3)

open(17,file='wa_xyz',status='old')
do i=1,768
read (17,*) B(i),A(i,1),A(i,2),A(i,3)
end do
close(17)

open(18,file='nem_wa_xyz',status='unknown')
do i=1,768
if(mod(i,3)/=0)then
write(18,*)(B(i),A(i,j),j=1,3)
end if
end do
close(18)

stop
end program
[code:]
读取这样一段数据:
O         3.668000       10.082000       15.904000
H         3.224000       10.451000       15.101000
H         3.092000       10.379000       16.627001
O         5.186000       16.695999       12.072000
H         6.083000       16.979000       11.816000
H         5.337000       15.832000       12.490000
O         3.786000       16.318001        1.310000
H         3.781000       15.388000        1.196000
H         4.528000       16.580000        0.781000
O         6.205000        6.991000       18.441999
H         6.782000        7.347000       19.152000
H         5.309000        7.062000       18.799999
O        16.125999       14.701000        4.577000
H        16.070000       14.272000        3.726000
………………………………………………………………………………
得到的如下
O   3.6680000     O   10.082000     O   15.904000   
H   3.2240000     H   10.451000     H   15.101000   
O   5.1859999     O   16.695999     O   12.072000   
H   6.0830002     H   16.979000     H   11.816000   
O   3.7860000     O   16.318001     O   1.3099999   
H   3.7809999     H   15.388000     H   1.1960000   
O   6.2049999     O   6.9910002     O   18.441999   
H   6.7820001     H   7.3470001     H   19.152000   
O   16.125999     O   14.701000     O   4.5770001   
H   16.070000     H   14.272000     H   3.7260001   
O   2.7500000     O   8.8439999     O   9.6289997   
H   2.1099999     H   8.2900000     H   9.9980001   
O   10.674000     O   8.9090004     O   4.9860001   
H   10.998000     H   8.8710003     H   5.9320002   
O  2.00000009E-03 O   5.6669998     O   14.591000   
H  0.48300001     H   5.9899998     H   13.830000   
………………………………………………………………………………
这就可以明显的看出问题是出在哪里了,本来读取数据的时候采用的是和写入一样的方式(B(i),A(i,j),j=1,3),一直出现上面的错误,记录一下,以备日后学习汲取教训

[ Last edited by xk6891 on 2011-3-20 at 13:20 ]

进一步修改成这样就顺多了,首先要能读,然后才是写入数据
code:
program main
implicit none
integer i,j
character B
real A
dimension B(768),A(768,3)

open(17,file='wa_xyz',status='old')
do i=1,768
read(17,*)B(i),A(i,1),A(i,2),A(i,3)
end do
close(17)

open(18,file='nem_wa_xyz',status='unknown')
do i=1,768
if(mod(i,3)/=0)then
write(18,"(A3,3(F16.6))"B(i),A(i,1),A(i,2),A(i,3)
end if
end do
close(18)

stop
end program
code:
得到的结果
  O        3.668000       10.082000       15.904000
  H        3.224000       10.451000       15.101000
  O        5.186000       16.695999       12.072000
  H        6.083000       16.979000       11.816000
  O        3.786000       16.318001        1.310000
  H        3.781000       15.388000        1.196000
  O        6.205000        6.991000       18.441999
  H        6.782000        7.347000       19.152000
  O       16.125999       14.701000        4.577000
  H       16.070000       14.272000        3.726000
  O        2.750000        8.844000        9.629000

[ Last edited by xk6891 on 2011-3-20 at 13:25 ]
22楼2011-01-13 23:56:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

uiui

新虫 (小有名气)



小木虫(金币+0.5):给个红包,谢谢回帖交流
1111

[ Last edited by uiui on 2011-1-14 at 07:41 ]
23楼2011-01-14 07:36:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)


记录一下,现在知道了
CODE:
write(……PAD='NO'……)

这样就可以不输出空格了

[ Last edited by xk6891 on 2011-6-17 at 16:59 ]
24楼2011-06-17 16:56:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xk6891 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见