【问题标题】:Fortran write array tab delimited to text fileFortran 写入数组制表符分隔到文本文件
【发布时间】:2016-11-04 08:38:40
【问题描述】:

有没有办法在一行中写入一个数组(没有 do-loop)(在 fortran 中)并用制表符分隔?

我试过以下两个版本都没有成功..(第一个只写一个数字,第二个写它们都用空格填充)

real       :: var(10)
var = 1
write(*,'(10(t1,f7.2))')
write(*,'(t1,10f7.2)')

我查看了here 却没有找到操作方法。 (尽管它提供了一些信息)。

【问题讨论】:

  • 有很多方法可以做你想做的事(有时间的人可能会写一个答案或找到另一个链接),但我会注意到 T 编辑描述符附带的“tabbing”与 ASCII 制表符无关。您可以将后者添加为文本。

标签: formatting fortran


【解决方案1】:
real :: var(10)
var=1
write(*,"(10(f7.2,a))") (var(i),achar(9),i=1,10)

【讨论】:

  • 或者,如果您的编译器支持 F2008 无限重复计数功能:real :: var(10) var = 1. write (*,"(*(f7.2,:,a))") (var(i),achar(9),i=1,size(var)) 请注意冒号 - 这可以防止尾随制表符。 (这是 F77 功能。)看不到如何在该代码中换行!
  • @steve 刚刚退休并且已经在使用 stackoverflow 了吗?
  • 对不起史蒂夫,但我不明白你怎么能用“:”避免最后一个标签;对我来说,这仅适用于格式本身的元素。但是 achar(9) 属于正在写入的变量 => 预计有 10 个选项卡!
  • 也许可以避开最后一个制表符:character(20) :: form ; form="(999(f7.2,:,'"//achar(9)//"'))" ; write(*,form) 变量
  • @FrancoisJacq 还没有退休 - 但很快。你是对的,我给出的代码不会避免最后一个选项卡,但这真的不重要。
【解决方案2】:

该问题的原始答案是 100% 正确的,但我根据 Steve Lionel 在英特尔 Fortran 论坛上给出的 csv 格式字符串(我现在似乎找不到该帖子)做出的更通用的答案是以下:

tsvFormat = '(*(G0.6,:,"'//achar(9)//'"))'
write(*, tsvFormat) ValueArr, moreRealValues, 64.0, maybeAnIntegerArrayToo, string 

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2012-04-26
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多