gpt4 book ai didi

string - 用逗号拆分未知长度但已知子字符串格式的 Fortran 字符串?

转载 作者:行者123 更新时间:2023-12-05 08:54:59 25 4
gpt4 key购买 nike

我正在尝试用逗号将输入变量拆分为一些 Fortran 代码。该变量是一个包含可变数量日期的字符串,但日期始终采用 DD-MMM-YYYY 格式。

这样一个字符串的例子:

04-DEC-2015,10-DEC-2015,23-DEC-2015,25-DEC-2015

它并不总是四个日期,但它始终是该格式的 11 个字符的日期。

我只是想在不同的行中打印这些日期;当前代码:

write(outfile,10) '     - ', TRIM(days)

打印:

     -  04-DEC-2015,10-DEC-2015,23-DEC-2015,25-DEC-2015

我想写一些可以打印的东西:

     -  '04-DEC-2015'
- '10-DEC-2015'
- '23-DEC-2015'
- '25-DEC-2015'

有没有一种直接的方法可以做到这一点(我是 Fortran 的新手)?我正在考虑计算字符串中逗号的数量,加 1 以获得日期数量,并在循环中创建适合每个日期的 CHARACTER(11) 变量,从中获取 11 个字符一次字符串(跳过逗号),并以我想要的格式打印该日期。是不是太绕了?

最佳答案

正如之前所建议的那样,从内部文件中进行列表定向读取将无需更多努力即可处理逗号拆分。对于

character(11) :: split_days(MAX_DAYS)=''
ndays = ...
read(days,*) split_days(1:ndays)

为了工作,我们需要知道 ndays 的值。如果你对类似的事情感到满意

ndays = (len_trim(days)+1)/12
ndays = INDEX(days,',',BACK=.TRUE)/12+1

ndays = COUNT([(days(i:i),i=1,LEN_DAYS)].eq.',')+1

那么一切都很好。

或者,你可以有一个可分配的数组

character(11), allocatable :: split_days(:)
ndays = ...
allocate (split_days(ndays))
read(days,*) split_days

或者,您不需要读取内部文件(列表导向或其他方式),但如果我相信输入数据的形式,我可能会这样做。

do i=1,MAX_DAYS
split_days(i)=days(12*(i-1)+1:)
if (INDEX(days(12*i:),',').eq.0) exit
end do

列表导向读取方法的另一种可能性是选择较大的数字进行读取,如果失败,请再次尝试读取较少的数字。这只有在更棘手的情况下才有意义。

最后,如果需要,您可以使用常用的数组收缩/增长技巧。


如果您只是在打印之后,而不是在存储之后,那么上面的循环方法可以避免弄乱未知长度的数组:

do i=1,MAX_DAYS
print '(" - ''",A11,"''")', days(12*(i-1)+1:)
if (INDEX(days(12*i:),',').eq.0) exit
end do

关于string - 用逗号拆分未知长度但已知子字符串格式的 Fortran 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com