comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Reading and Plotting big txt. File
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Reading and Plotting big txt. File [message #55104 is a reply to message #55099] Wed, 01 August 2007 07:49 Go to previous messageGo to previous message
incognito.me is currently offline  incognito.me
Messages: 16
Registered: August 2007
Junior Member
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.
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Re: Question on collection change - MOD07 air profile
Next Topic: Re: Another HDF File Question

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 18:58:45 PDT 2025

Total time taken to generate the page: 0.00454 seconds