;+ ; NAME: ; cleanunixfile ; PURPOSE: ; Removes carriage returns from an ascii file ; CATEGORY: ; Tricks ; CALLING SEQUENCE: PRO cleanunixfile, file ; INPUTS: ; file scalar; string ; name of existing file ; OUTPUTS: ; modified file ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; SetFileSpec, GetFileSpec, do_file ; PROCEDURE: ; The original file will be overwritten ; MODIFICATION HISTORY: ; JAN-2002, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ;- file_in = (FindAllFiles(file))[0] IF file_in EQ '' THEN message, 'file not found: '+file message, /info, 'reading '+file_in on_ioerror, cleanup_read openr, /get_lun, iu, file_in nc = (fstat(iu)).size c = bytarr(nc) readu, iu, c cleanup_read: on_ioerror, null IF n_elements(iu) NE 0 THEN free_lun, iu sp = 32B ; Space cr = 13B ; Carriage return lf = 10B ; Line feed cf = string(cr)+string(lf) ; Carriage return, line feed pair ; Intercept isolated carriage returns; replace by spaces i = where(c[0:nc-2] eq cr and c[1:nc-1] ne lf) IF i[0] NE -1 THEN c[i] = 32B c = string(c) ; split at linefeed and/or carriage control c = strtok(c, cf, /extract) nc = n_elements(c) SetFileSpec, file_in file_out = filepath(root=GetFileSpec(upto='dir'), GetFileSpec(part='name')+'_new'+GetFileSpec(part='type')) message, /info, 'writing '+file_out on_ioerror, cleanup_write openw, /get_lun, iu, file_out FOR i=0,n_elements(c)-1 DO printf, iu, c[i] cleanup_write: on_ioerror, null IF n_elements(iu) NE 0 THEN BEGIN free_lun, iu message, /info, 'deleting '+file_in tmp = do_file(/delete, file_in) message, /info, 'moving '+file_out+' to '+file_in tmp = do_file(/move, file_out, file_in) ENDIF RETURN & END