读取固定宽度和缺失值的表格数据

我试图在 Go 中从磁盘读取一个表,混合整数和浮点数,其中每个字段的宽度是固定的(每个字段占据固定数量的位置,如果太短则前面有空格)并且某些值可能是丢失(并且应该默认为零)。


文件在这里:https : //celestrak.com/SpaceData/sw20100101.txt


用于读取它的 Fortran 格式写在标题中:


FORMAT(I4,I3,I3,I5,I3,8I3,I4,8I4,I4,F4.1,I2,I4,F6.1,I2,5F6.1)

这些行看起来像这样(最后几行,有空格):


2014 12 29 2475  2 20 30 23 33 37 47 33 47 270   7  15   9  18  22  39  18  39  21 1.1 5  64 127.1 0 150.4 156.0 131.4 153.3 160.9

2014 12 30 2475  3 30 40 37 20 30 27 27 23 233  15  27  22   7  15  12  12   9  15 0.8 4  66 126.0 0 150.3 156.1 130.3 152.7 161.0

2014 12 31 2475  4 13 23 13 17 20 33 13 17 150   5   9   5   6   7  18   5   6   8 0.4 2  65 129.2 0 150.5 156.3 133.6 152.4 161.3

2015 01 01 2475  5 20 10 10 10 10 20 20 30 130   7   4   4   4   4   7   7  15   6       101 138.0 0 150.7 156.6 142.7 152.1 161.7

2015 01 02 2475  6 30 10 20 20 30 20 30 40 200  15   4   7   7  15   7  15  27  12       113 146.0 0 150.9 157.0 151.0 152.2 162.1

2015 01 03 2475  7 50 30 30 30 30 20 20 10 220  48  15  15  15  15   7   7   4  15       122 149.0 0 151.0 157.2 154.1 152.4 162.4

我一直在尝试与 Sscanf 一起使用的巧妙格式字符串(如“%4d%3d%3d%5d...”),但它不适用于空格,或者如果数字未与其插槽右对齐。

我正在寻找一种像在 Fortran 中一样阅读它的方法,其中:

  • 混合字段类型(整数、浮点数、字符串)是可能的。

  • 每列都有固定的字符大小,如有必要,用空格填充插槽,但不同的列可能具有不同的大小。

  • 数值前面可以有零。

  • 值可能会丢失,在这种情况下,它会给出零值。

  • 值可以在插槽中的任何位置,不一定是右对齐的(不是示例,但可能是可能的)

有没有一种聪明的方法来阅读这样的东西,还是我应该手动拆分、修剪、检查和转换每个字段?


慕丝7291255
浏览 158回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go