On 1 Aug., 14:44, Conor <cmanc...@gmail.com> wrote:
> On Aug 1, 6:25 am, greg.a...@googlemail.com wrote:
>
>
>
>
>
>> On Aug 1, 11:33 am, "incognito.me" <incognito...@gmx.de> wrote:
>
>>> I'm trying to read and plot (surface) a very big text (.txt) file
>>> (1020, 1024) with a 5 line string Header in IDL. My file looks like a
>>> circle made of numbers!!!. That means in some lines and colums there
>>> are no numbers only blanks!!!for example my file contains integers
>>> between rows 633 and 390 and between columns 650 and 406.At the left
>>> side of the file, there are the numbers of rows (1023,1022,1021,....0)
>>> my code should not read, but it does. And I also notice, that my code
>>> don't begin to read where the data starts!!By running the code I have
>>> the following error message: READF: End of file encountered. Unit: 1.
>>> Can someone help me?
>>> This is how my code looks like
>>> pro readfile, filename
>
>>> ; file=strupcase(filename)
>>> rows=file_lines(file)
>>> ;open the file and read the five line header.
>>> openr,1,file
>>> header=strarr(5)
>>> readf,1,header
>>> ; Find the number of columns in the file
>>> cols=fix(strmid(header(3),14,4))
>>> ; Number of rows of the data
>>> rows_data=rows-n_elements(header)
>
>>> ;Create a big array to hold the data
>>> data=intarr (cols, rows_data)
>>> ; All blanks should be replaced by zero
>>> data[where(data eq ' ')]=0
>>> ; A small array to read a line
>>> s=intarr(cols)
>>> n=0
>>> while (~ eof(1) and (n lt rows_data -1 )) do begin
>>> ; Read a line of data
>>> readf,1,s
>>> ; Store it in data
>>> data[*,n]=s
>>> n=n+1
>>> end
>>> data=data[*,0:n-1]
>
>>> CLOSE,1
>>> Shade_surf, data
>>> end
>
>>> thanks
>
>>> incognito
>
>> I'm suspicious of the line converting blanks to zeros before you've
>> even read them. I don't think the blanks will come out the way you're
>> expecting, anyway. I'd suggest you write a program to correctly read
>> your first line of data before you go for the whole thing.
>
>> Greg
>
> For starters, I'm not sure why you are converting blanks to zeroes
> there at all. As far as I can tell, you haven't even initialized any
> data yet. It seems like you are trying to convert blanks to zeros on
> an integer array which is already filled with zeroes anyway. When I
> tried to do that, I got this error:
>
> % Type conversion error: Unable to convert given STRING to Integer.
>
> Which isn't a fatal error, so your code would still run but the line
> 'data[where(data eq ' ')]=0' wouldn't actually do anything. As for
> the rest of your problem, I think what you need is a format
> statement. I believe what is happening is that because you haven't
> included an explicit format statement (telling it how many columns are
> on each line) it simply reads in entries until it fills up a row in
> your data array. For instance, look at this file:
>
> 12 34 698 934
> 16 18
> 17 20 13
> 14 23 234 123
>
> being read by this pseudo-code:
>
> readf,lun,file,/get_lun
> data = intarr(4)
> readf,lun,data
> print,data
> ; 12 34 698 934
> readf,lun,data
> print,data
> ; 16 13 17 20
> readf,lun,data
> print,data
> ; 14 23 234 123
> readf,lun,data
> % READF: End of file encountered. Unit: 100, File: test
>
> See, because you have no format specified, each readf keeps reading
> data in until the data array is filled. You are assuming that readf
> reads one line at a time, but that's not happening, which is why your
> data isn't where it's supposed to be. Also, because it is reading
> faster than one line at a time, you are reading to the end of the file
> before you call readf (rows_data) times, and then you get the EOF
> error. The solution is to give it a format:
>
> IDL> openr,lun,'test',/get_lun
> IDL> format = '(i3, 1x, i3, 1x, i3, 1x, i3)'
> IDL> readf,lun,test,format=format
> IDL> print,test
> 12 34 698 934
> IDL> readf,lun,test,format=format
> IDL> print,test
> 16 0 0 18
> IDL> readf,lun,test,format=format
> IDL> print,test
> 17 20 0 13
> IDL> readf,lun,test,format=format
> IDL> print,test
> 14 23 234 123- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -
Hi Conor,
Thanks for your suggestions!I muss agree,to fill the blanks with
zeroes was not so cute!!I have to read how one uses the keyword format
with readf again,because I should confest I haven't unsterstood
yet.Could you please give me a hint?
Thanks a lot,
Kind regards
C.
|