Arrays fortran90:以不同结构打印整数数组
我有一个整数数组Arrays fortran90:以不同结构打印整数数组,arrays,integer,structure,fortran90,Arrays,Integer,Structure,Fortran90,我有一个整数数组 int(4) :: idate ! 1979 March 1st 00hrs write(*,*)idate ! prints ' 0 3 1 1979' 我希望idate保存在另一个变量(仅限整数/整数数组)中,该变量将日期打印为: 1979030100 不将其更改为字符/字符串 这是可以做到的。请原谅,如果这件事很琐碎,我已经花了很多时间在上面了。你可以这样做: integer :: date_as_int ... date
int(4) :: idate ! 1979 March 1st 00hrs
write(*,*)idate ! prints ' 0 3 1 1979'
我希望idate
保存在另一个变量(仅限整数/整数数组)中,该变量将日期打印为:
1979030100
不将其更改为字符/字符串
这是可以做到的。请原谅,如果这件事很琐碎,我已经花了很多时间在上面了。你可以这样做:
integer :: date_as_int
...
date_as_int = idate(1)*10**6 + idate(2)*10**4 + idate(3)*10**2 + idate(4)
你甚至可以逃脱惩罚
date_as_int = sum(idate*10**[6,4,2,0])
或
方括号语法来自Fortran 2003。对于较旧的编译器,
[6,4,2,0]
应该被(/6,4,2,0/)
所取代。以这种形式打印日期相对容易,您是否还需要将其存储为该描述的整数?是的,我需要将其存储在变量中,该变量将作为代码其他部分的输入。如果你能告诉我怎么做,我将不胜感激!!!谢谢你,马克!现在看来还可以,但当年份和日期(运行时的变化)是个位数(10的指数应该相应地变化)时,问题就会出现。当然,这也可以通过引入if-else循环来处理。还有更复杂的方法吗???如果你能精确地解释一种更复杂的方法来达到你的目的,那么你就可以帮助你编写代码了。现在,我看不出有任何需要更复杂。当然,如果您的输入数据与问题中的示例不匹配,您必须修改代码;再一次,我看不出你会有什么问题。马克,如果我的评论伤害了你,我很抱歉。我可以使用write(*,'(i4,3i2.2')idate(4),idate(2),idate(3),idate(1)打印它。以类似的方式,我认为会存在一些函数,比如整型的TRIM或ADJUSTL,任务可以完成。我没有受伤,我脸皮厚。但我越来越困惑于你想做什么。您评论说您没有尝试格式化输出日期,而是将其分配给一个整数变量。现在,您正在询问有关为字符变量定义的函数的问题。如果您需要/想要更多帮助,请澄清,如果不需要。第二个应该是DOT_乘积(idate,10**[6,4,2,0])
或SUM(idate*10**[6,4,2,0])
。
date_as_int = dot_product(idate, 10**[6,4,2,0])