【问题标题】:Meaning of 3F7.1 in Fortran data formatFortran数据格式中3F7.1的含义
【发布时间】:2017-12-21 03:02:14
【问题描述】:

我正在尝试使用 HLM 7 Student 版本创建 MDM 文件,但由于我无法访问 SPSS,因此我正在尝试使用 ASCII 输入导入我的数据。作为此过程的一部分,我需要输入 Fortran 风格的数据格式。尝试我可能无法理解这一步。熟悉 Fortran(甚至更好的 HLM 本身)的人可以向我解释这是如何工作的吗?这是我目前的理解

From the example EG3.DAT they give 

    (A4,1X,3F7.1)

I think

A4 signifies that the ID is 4 characters long.
1X means skip a space.
F.1 means that it should read 1 decimal places.

我对 3F7 可能意味着什么感到非常困惑。

EG3.DAT

2020   380.0   40.3   12.5
2040   502.0   83.1   18.6
2180   777.0   96.6   44.4

以下是帮助文档中的示例。

Rules for format statement Format statement example

EG1 data format EG2 data format EG3 data format

【问题讨论】:

  • 这个网站上有很多关于 Fortran 格式的问题。尝试先搜索确实很好。或者查看一些文档或教程pages.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html
  • 请注意,HLM 不是 fortran,但有些相关。 ssicentral.com/hlm 我对此一无所知,但请注意 i/o 处理可能存在差异。在 fortran 中,几乎总是首选不为 input 使用显式格式,因为列表定向输入非常强大/灵活。
  • 感谢大家的帮助。经过多次反复试验,我想通了,如果没有您的帮助,我无法做到。我将在答案中发布完整过程,以防其他人需要将 Excel 文档转换为 HLM 的 MDM。

标签: fortran format


【解决方案1】:

一个类似的问题是Explaining Fortran Write Format。不幸的是,它没有明确地处理 F 描述符。

3F7.1 表示 3 个浮点数,每个打印超过 7 个字符,每个小数点后面有一个十进制数。前导字符为空格。

对于阅读,您根本不需要 .1 信息,只需从这 7 个字符中读取一个浮点数。

你猜对了 A4(四个字符的字符串)和 1X(一个空格)的含义。

【讨论】:

  • 阅读和 F7.1 有一个问题 - 如果您在输入中不包含小数点,它将假定最后一位数字是分数。例如,使用 F7.1 读取 1234567 将得到 123456.7。但是,如果您在 123.456 中阅读,那就是您会得到的。 (我会尝试解释 P 比例因子编辑描述符的额外影响,但我需要再喝一到三杯啤酒才能做到这一点。)
  • 没错,但这里不重要。我假设 tje OP 没有使用 Fortran,只是读取使用该描述符写入的 Fortran 写入的数据,如上所示。
  • 从其中一张图片中,我什至得出结论,在支持的 Fortran 规则子集中,实际上需要 .d 组件(大于零)。
  • 我不知道,可能我错了,我不知道 HLM、MDM 和 SPSS,但我认为 OP 不是在 Fortran 中编程。
  • 感谢大家的帮助。经过多次反复试验,我想通了,如果没有您的帮助,我无法做到。我将在答案中发布完整过程,以防其他人需要将 Excel 文档转换为 HLM 的 MDM。
【解决方案2】:

在 Fortran 中,所谓的数据编辑描述符(格式化数据的输入或输出)可能有重复的规范。

(A4,1X,3F7.1) 格式中,数据编辑描述符为A4F7.1。只有F7.1 具有重复规范(F 之前的数字)。这仅仅意味着格式就像重复出现的描述符:如F7.1, F7.1, F7.1。重复指定1,或者没有给出,只有一个外观。

那么问题的格式是这样的

(A4,1X,F7.1,F7.1,F7.1)

此格式包含在问题的一张图片中提供的规则中。特别地,规则2中给出了重复规范的方面,并与规则3的相应示例给出了相应的示例。

此外,在 Fortran 中,重复计数说明符也可能是 * 作为特殊情况:这就像一个非常大的重复计数。 *(F7.1) 就像 F7.1, F7.1, F7.1, ...。我没有看到 HLM 支持这一点的迹象,但如果需要,可以给出非常大的重复计数。


1X 中,1 不是重复说明,而是位置编辑描述符的一个不可或缺的必要部分。

【讨论】:

    【解决方案3】:

    从 excel 为 HLM 制作 MDM 文件的过程:

    -确保所有列中的所有字符都对齐

    • 选择一列,然后右键单击并选择设置单元格格式
    • 然后单击“自定义”并转到“类型”框并输入数字 0s 你需要把所有东西都排好

    -从文档中删除所有选项卡并用空格替换它们。

    • 在 word 中打开文档并使用查找和替换

    -将文档另存为.dat

    • 先保存为.txt

    • 然后在记事本中打开并保存为.dat

    输入数据格式(FORTRAN-Style)

    程序要逐个空间读取数据文件,所以你必须完美地指定它,这样它才能正确读取整个集合。 如果有问题,即使是一个空格,那么与您在另一个程序中检查它们相比,您的描述性统计数据将是不稳定的。

    • 用括号 () 将代码括起来
    • 用逗号分隔条目,

    -需要所有级别的ID列

    • ID 列需要排序,从小到大 最大的

    • 使用 A#,# 是 ID 中的字符数

    • 使用 X1 来 从 ID 移动到下一列

    -需要说每列需要多少个字符

    • 使用 F
    • F 之后是该列所需的字符数 - 使用 F#(#= 数字)

    • 需要有足够的字符空间来提供一个“间隙”空间 每列之间

    • 需要有足够的字符空间以允许小数点

    • 作为 F 的一部分,您需要指定小数位数

    • 您可以通过在 F 数字后添加一个小数点,然后添加一个 代表你需要的空格的数字 -F#.#

    • 您可以在 F 前面使用一个数字来“重复”它。不是 不过是必要的。 -#F#.#

    总而言之,它应该是这样的:

    (A4,X1,F4.0,F5.1)
    

    有用的链接:

    https://books.google.de/books?id=VdmVtz6Wtc0C&pg=PA78&lpg=PA78&dq=data+format+fortran+style+hlm&source=bl&ots=kURJ6USN5e&sig=fdtsmTGSKFxn04wkxvRc2Vw1l5Q&hl=en&sa=X&ved=0ahUKEwi_yPurjYrYAhWIJuwKHa0uCuAQ6AEIPzAC#v=onepage&q&f=false http://www.ssicentral.com/hlm/help6/error/Problems_creating_MDM_files.pdf http://www.ssicentral.com/hlm/help7/faq/FAQ_Format_specifications_for_ASCII_data.pdf

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 2017-11-18
      • 2017-01-03
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 2015-07-29
      相关资源
      最近更新 更多