【问题标题】:idl strange symbols in fileidl文件中的奇怪符号
【发布时间】:2014-09-26 23:05:08
【问题描述】:

我编写了几个 IDL 程序来分析一些数据。为了简单起见,程序读取一些时变数据并计算傅立叶光谱。此光谱使用以下代码写入文件:

openw,3,filename        
printf,3,[transpose(freq),transpose(power)],format='(e,e)'
close,3 

然后另一个程序使用此代码读取该文件:

rdfloat,filename,freq,power,/double

rdfloat 程序可以在这里找到:http://idlastro.gsfc.nasa.gov/

我在尝试读取文件时遇到的错误是:“输入转换错误。单位:101” 当我深入研究正在读取的文件时,我注意到几种类型的无法识别的字符。我不知道这些是由于写入文件还是与正在创建的文件数量(超过 300 个文件)相关的其他原因

这些符号/字符代替单个数字:

< dle> < dc1> < dc2> < dc3> < dc4> < can> < nak> < em> < soh> < syn>

正在读取的文件中出现的示例,注意它们不是连续的行。

7.7346< dle>18165493007e+01   8.4796811549010105e+00
7.7354408697119453e+01   1.04459538071< dc2>1749e+01
7.7360701595839< can>28e+01   3.0447318983094189e+00

每当我运行写入文件的程序时,总会有至少一个文件包含部分或全部这些字符。包含这些字符的文件总是不同的。

谁能解释这些符号是什么,我可能会做些什么来创建它们,以及如何确保它们不会被写入文件?

【问题讨论】:

    标签: file-io idl-programming-language


    【解决方案1】:

    我发现有两件事可能会导致问题。但首先,我想提出一些建议。

    当您打开文件时,使用 /GET_LUN 关键字很有用,因为它允许 IDL 查找和使用可用的逻辑单元号 (LUN)(例如,如果您在其他地方打开 LUN 3)。打印格式化数据时,应指定总宽度和小数位数。这将使事情变得更容易,因为这样您就不必担心更改文件中数字之间的间距。

    所以我会将您的第一组代码更改为以下(或以下的一些变体):

    OPENW,gunit,filename[0],/GET_LUN,ERROR=err
    FOR j=0L, N_ELEMENTS(freq) - 1L DO BEGIN
      PRINTF,gunit,freq[j],power[j],FORMAT='(2e20.12)'
    ENDFOR
    FREE_LUN,gunit  ;;  this is better than using the CLOSE routine
    

    所以我看到的第一个潜在问题是,如果您的变量 power 是使用 FFT.pro 之类的东西计算的,那么它将是一个复数浮点数或复数双精度数,具体取决于所使用的输入和关键字。

    第二个潜在问题可能是由于格式声明不正确。你没有告诉PRINTF 有多少列或行。它可能不知道如何正确处理输入,因此它会猜测并可能导致您显示的那些字符。这些字符可能是由于格式声明模糊或您用于查看文件的软件导致的空格字符(例如,我不建议使用 Word 打开文本文件,使用文本编辑器)。

    旁注:您可以打开并阅读您刚刚编写的文件,方式与我上面显示的类似,但更改为以下内容:

    n = FILE_LINES(filename[0])
    freq = DBLARR(n)
    power = DBLARR(n)
    OPENR,gunit,filename[0],/GET_LUN,ERROR=err
    FOR j=0L, N_ELEMENTS(freq) - 1L DO BEGIN
      READF,gunit,freq[j],power[j],FORMAT='(2e20.12)'
    ENDFOR
    FREE_LUN,gunit  ;;  this is better than using the CLOSE routine
    

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多