чтение и запись нескольких файлов данных в idl - PullRequest
1 голос
/ 04 июля 2019

Я новичок в IDL и пытаюсь прочитать несколько двоичных файлов данных из определенной папки и записать их в текстовом формате в определенную папку одновременно. В настоящее время у меня есть код, который читает и записывает только один файл за раз, и мне приходится делать именование вручную, но мне нужно читать и записывать все файлы одновременно, чтобы избежать ошибок именования при чтении одного за другим вручную. Вот мой код, пожалуйста, помогите. Мне нужно прочитать и записать несколько файлов данных одновременно.

    pro readfitacf

; Open the raw file for read only 


  inp=FitOpen('/media/New Volume/SANAE/2010_fitacf/2010 Jan/20100114.0931.17.san.fitacf',/read)


;  Search for a specific time in the file

;prm.bmnum = 15

;prm.nrang = 5

filename = '/project/2010 Jan/20100114.0931.17.san.txt'

OPENW,5,filename

где Fitopen - это следующая функция


      function FitOpen,fname,atme=atme,lib=lib, $
               native=native,external=external, $
                read=read,write=write,update=update
mode=0

if (KEYWORD_SET(lib) eq 0) then lib=getenv('LIB_FITIDL')

if KEYWORD_SET(native) then mode=1

if KEYWORD_SET(external) then mode=2

if (mode eq 0) and (file_test(lib) eq 1) then mode=2 $

else if (mode eq 0) then mode=1


if (mode eq 1) then begin

if KEYWORD_SET(read) then openr,unit,fname,/GET_LUN,/SWAP_IF_BIG_ENDIAN

if KEYWORD_SET(write) then openw,unit,fname,/GET_LUN, /SWAP_IF_BIG_ENDIAN

if KEYWORD_SET(update) then openu,unit,fname,/GET_LUN, /SWAP_IF_BIG_ENDIAN

endif else begin

if KEYWORD_SET(read) then openr,unit,fname,/GET_LUN,/STDIO

if KEYWORD_SET(write) then openw,unit,fname,/GET_LUN,/STDIO

if KEYWORD_SET(update) then openu,unit,fname,/GET_LUN,/STDIO

endelse


return, unit

end

1 Ответ

0 голосов
/ 07 июля 2019

Вы можете использовать FILE_SEARCH для поиска определенных файлов с шаблоном и получения массива путей к файлам. Затем просто зациклите этот массив. Чтобы получить базовое имя файла, используйте, например, FILE_BASENAME :

files = FILE_SEARCH('directory1/*.fitacf')

FOR i = 0, N_ELEMENTS(files) - 1 DO BEGIN
    inp=FitOpen(files[i],/read)
    filename = 'directory2/'  + FILE_BASENAME(files[i], '.fitacf') + '.txt'
    OPENW, unit, filename, /GET_LUN
    ; do stuff
    FREE_LUN, unit, inp
ENDFOR
...