Fortran数据格式中3F7.1的含义

Fortran数据格式中3F7.1的含义,fortran,format,Fortran,Format,我试图使用HLM7学生版创建一个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

我试图使用HLM7学生版创建一个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
下面是帮助文档中的示例

一个类似的问题是。不幸的是,它没有显式地处理F描述符

3F7.1
表示3个浮点数,每个浮点数打印超过7个字符,每个浮点数后面有一个小数点。前导字符是空白的

阅读时根本不需要
.1
信息,只需从这7个字符中读取一个浮点数即可

您正确猜测了A4(四个字符的字符串)和1X(一个空白)的含义。

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

格式为
(A4,1X,3F7.1)
的数据编辑描述符为
A4
F7.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
不是重复的规范,而是位置编辑描述符的一个完整且必要的部分。

从excel为HLM生成MDM文件的步骤:

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

  • 选择一列,然后单击鼠标右键并选择“设置单元格格式”
  • 然后单击“自定义”并转到“类型”框并输入数字 当然,你需要把所有的东西都排好
-删除文档中的所有选项卡,并将其替换为空格

  • 在word中打开文档并使用“查找和替换”
-将文档另存为.dat

  • 首先将其另存为.txt

  • 然后在记事本中打开它并将其另存为.dat

输入数据格式(FORTRAN样式)的步骤

程序希望逐空间读取数据文件,因此必须完全指定它,以便正确读取整个集合。 如果某个东西关闭了,即使只有一个空格,那么与在另一个程序中检查它们相比,您的描述性统计数据将是不可靠的

  • 用括号()括起代码
  • 将条目除以逗号
-需要所有级别的ID列

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

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

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

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

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

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

  • 需要有足够的字符空间来容纳小数

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

  • 您可以通过在F数后添加一个小数点,然后添加一个 表示所需空间的数字-F##

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

总之,它应该是这样的:

(A4,X1,F4.0,F5.1)
有用链接:


在这个网站上有很多关于Fortran格式的问题。首先尝试搜索真的很好。或者查阅一些文档或教程,注意HLM不是fortran,但有点相关。我对此一无所知,但请注意,在I/o处理方面可能存在差异。在fortran中,几乎总是不使用显式格式进行输入,因为列表定向输入非常强大/灵活。谢谢大家的帮助。经过多次尝试和错误,我终于明白了这一点,没有你的帮助,我不可能做到这一点。如果其他人需要将Excel文档转换为MDM for HLM,我将在答案中公布完整的过程。reading和F7.1有一个缺点-如果输入中不包含基数,它将假定最后一位数字是分数。例如,使用F7.1读取1234567将得到123456.7。但如果你读123.456,你就会得到。(我试着解释P比例因子编辑描述符的额外效果,但我需要再喝一杯或三杯啤酒才能做到这一点。)这是真的,但在这里并不重要。我ussume tje OP没有使用Fortran,只是读取使用该描述符编写的Fortran写入的数据,如上图所示。从其中一张图片中,我甚至得出结论,在Fortran规则支持的子集中,
.d
组件实际上是必需的(大于零)。我不知道,可能我错了,我不知道HLM,MDM也不是SPSS,但我假设OP不是用Fortran编程的。谢谢大家的帮助。伊夫