我想在IDL中创建一个结构并从我的ASCII文件中提取信息。问题是我有几个ASCII文件,总是列数和行数不同。例如,我有ASCII文件“data.dat”,有50行和2040列。我知道我们可以定义数据结构(如果我们假设我只有5列):
datastruct = { col1:0L, col2:0.0, col3:0.0, col4:0.0, col5:0.0}
我可以阅读我的文件,然后复制结构:
file = 'data.dat'
nrows = file_line(file) ; to estimate the number of rows
data = replicate(datastruct, nrows)
openr, lun, file, /GET_LUN
readF, lun, data
free_lun, lun
我可以:print, data.col1
或print, data.col2
等等......但这会只给我前5列。我如何能够做到2040列,以及我们事先不知道文件中的列数。
真实数据文件包含在不同日期观察到的具有相应错误的几颗恒星的通量。该表没有标题。
天Flux1 Err1 Flux2 Err2 Flux3 Err3 .............. Flux2040 Err2040
感谢您的帮助!
答案 0 :(得分:1)
如果一个数字矩阵对于你来说比一个结构更合适,因为你有正确格式化的ASCII文件,一个简单的解决方案就是使用infile = "C:\Users\LB_laptop\Downloads\phot.avg.1.0"
data = read_ascii(infile)
data = data.FIELD001
:
IDL> data[0:5,0:10]
2457454.3 1.6190000 NaN 0.52709073 25.695290 0.20502000
2457455.3 1.8770000 NaN 0.14101060 27.126869 0.71034002
2457499.5 1.2810000 NaN 0.63232613 25.497650 0.17557999
2457500.3 1.5319999 NaN 0.41562101 25.953260 0.25950000
2457519.5 1.3420000 NaN 0.38020891 26.049940 0.28159001
2457525.3 1.2880000 NaN 0.29697639 26.318199 0.35189000
2457528.3 1.3510000 NaN 0.41356701 25.958639 0.26128000
2457529.3 1.3300000 NaN 0.36875120 26.083170 0.28975999
2457530.3 1.3400000 NaN 0.41647339 25.951031 0.25999999
2457533.3 1.3120000 NaN 0.33893269 26.174721 0.19237000
2457534.3 1.2800000 NaN 0.38690910 26.030979 0.15137000
这为您提供了一个易于处理的数字矩阵。例如:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sopraFx.extended.view.UserEditView">
<children>
<MenuBar layoutY="2.0" prefHeight="32.0" prefWidth="507.0">
</MenuBar>
<Button fx:id="logoutButton" layoutX="506.0" layoutY="2.0" mnemonicParsing="false" onAction="#handleCloseButtonAction" prefHeight="31.0" prefWidth="92.0" text="Zurück" />
<TextField fx:id="tableEditName" layoutX="369.0" layoutY="59.0" prefHeight="31.0" prefWidth="124.0" promptText="Username" />
<TextField fx:id="tableEditPassword" layoutX="369.0" layoutY="115.0" prefHeight="31.0" prefWidth="124.0" promptText="Password" />
<TextField fx:id="tableEditEmail" layoutX="369.0" layoutY="165.0" prefHeight="31.0" prefWidth="124.0" promptText="E-Mail" />
<Button fx:id="editButton" defaultButton="true" layoutX="527.0" layoutY="363.0" mnemonicParsing="false" text="Save" />
<Label layoutX="14.0" layoutY="64.0" text="you want to edit" />
<TableView fx:id="userEditTable" layoutX="6.0" layoutY="34.0" prefHeight="311.0" prefWidth="286.0">
</TableView>
</children>
</AnchorPane>