Hi Helder,
Thanks for all the help!! Your explanation of the Format components was great and will hopefully guide me in the future!
Yes working with this code has been a nightmare. There are 5 programs that all run together to read in the NLDAS files (which come in GRIB format) and the Landsat image. It is always hard to try and take an established program, or set of programs, and adapt it to your own needs. This is what I have been working on and I find that there are often steps I would have done differently, unfortunately I am still quite a newbie with IDL and so I don't yet have the luxury to re-invent the wheel per-se.
Thanks also for the alternative way to read in the data, I am sure it will make this process much easier.
Best to you and Thanks Again!!
Allisyn
On Monday, August 13, 2012 4:56:18 PM UTC-4, Helder wrote:
> On Monday, August 13, 2012 8:52:00 PM UTC+2, adh...@gmail.com wrote:
>
>> Yes, I agree it is the format line. After I changed the text to read as you suggested, the first program worked great :) I am simply not accustomed to working with the format command and therefore I am having a hard time figuring out the context of all the values. I understand that 'F' is used for float, 'I' for integer, 'A' for characters. I also understand that if you have 'A100' then your file name (or whatever) can not exceed 100 characters.
>
>>
>
>> However I am struggling with other inputs like:
>
>>
>
>>
>
>>
>
>> '/'-- does this mean a new line or return?
>
>>
>
>> ','-- does this mean the next command?
>
>>
>
>> '()'-- why would you have some values in additional parenthesis while others not
>
>>
>
>> 'F6.3'-- what is the relevance of the 6.3. I see (below) that there are 6 values for the number, but why the .3?
>
>>
>
>> 'A100,5'-- what is the relevance of ,5?
>
>>
>
>>
>
>>
>
>> Anyways this is the header information for the .ctl file that you requested:
>
>>
>
>> 7931
>
>>
>
>> 7001
>
>>
>
>> 224
>
>>
>
>> 464
>
>>
>
>> 25.063
>
>>
>
>> -124.938
>
>>
>
>> E:\ET code\workassignment\NEWwork\workassignment\final_simple_meth od_code\latlon_grid.dat
>
>>
>
>> 33.0
>
>>
>
>> 30.0
>
>>
>
>> -86.5
>
>>
>
>> -83.0
>
>>
>
>>
>
>>
>
>> right now the format line is written as:
>
>>
>
>> (I5,/,I5(/,I5),/,F6.3,/,F8.3,/,A100,5(/,F5.1))',nmx,nmy,nx,n y,lat1,lon1,fname1,$
>
>>
>
>> TM_lat_ul,TM_lat_ll,TM_lon_ul,TM_lon_ll
>
>>
>
>>
>
>>
>
>> Does that help you?
>
>>
>
>>
>
>>
>
>> :) A
>
>>
>
>>
>
>>
>
>>
>
>>
>
>>
>
>>
>
>> On Monday, August 13, 2012 2:19:48 PM UTC-4, Helder wrote:
>
>>
>
>>> On Monday, August 13, 2012 6:27:58 PM UTC+2, adh...@gmail.com wrote:
>
>>
>
>>>
>
>>
>
>>>> Hi Helder,
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> Thank you for your response! I have inserted your suggested change, however this particular program works off of several separate programs. Another section of code follows. This one will also need to be changed as well and simply replacing the 3 with a 4 is not working. Do you have a suggestion as to how this line should be altered to accommodate the new text you suggested?
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> FORMAT = '(I3,3(/,I3),/,F6.3,/,F8.3,/,A100,4(/,F5.1))',nmx,nmy,nx,ny, lat1,lon1,fname1,$
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> TM_lat_ul,TM_lat_ll,TM_lon_ul,TM_lon_ll
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> Thank you!
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> >
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> > Hi,
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> >
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> > although I have no experience with such images, my first guess is that you need to change the FORMAT in the READF command.
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> >
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> > Using '(I3)' will read 3 digits of integer numbers. I would put a I4. Can you check what comes up by doing that?
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> >
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> > Therefore try with: FORMAT = '(I4,/,I4,2(/,I4),25(/,A100),/,A100)'
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> >
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> > (I have not tested this...!!!)
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> >
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> > Cheers,
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> >
>
>>
>
>>>
>
>>
>
>>>>
>
>>
>
>>>
>
>>
>
>>>> > Helder
>
>>
>
>>>
>
>>
>
>>>
>
>>
>
>>>
>
>>
>
>>> Sorry, I don't because I don't know how the file header actually looks like.
>
>>
>
>>>
>
>>
>
>>> But I do think that you're having a problem with truncation in the format line.
>
>>
>
>>>
>
>>
>
>>>
>
>>
>
>>>
>
>>
>
>>> If you send me the first four or five header lines I can have a go at it. I'm not into satellite images, therefore I can't find such information quickly.
>
>>
>
>>>
>
>>
>
>>>
>
>>
>
>>>
>
>>
>
>>> Cheers,
>
>>
>
>>>
>
>>
>
>>> Helder
>
>
>
> Hi,
>
> well, I'm not that good with formats and I personally don't like the way your code is written down because it is for people like me with a limited experience difficult to read.
>
> A few tips to make the code "understandable":
>
> 1) using a & is the same as writing two lines. When debugging, the & make your life hell
>
> 2) read one line at a time. This way you can look at what is in it and debugging will be a lot easier.
>
>
>
> That said, I would rewrite the code necessary for the image size this way:
>
>
>
> LandSatFileName = 'C:\YourDirectory\YourFile.txt'
>
> GET_LUN, LandSatUnit
>
> OPENR, LandSatUnit, LandSatFileName
>
> nmx = 0L
>
> nmy = 0L
>
> nx = 0L
>
> ny = 0L
>
>
>
> READF,LandSatUnit, MyString
>
> nmx = FIX(MyString, TYPE=3)
>
> READF,LandSatUnit, MyString
>
> nmy = FIX(MyString, TYPE=3)
>
> READF,LandSatUnit, MyString
>
> nx = FIX(MyString, TYPE=3)
>
> READF,LandSatUnit, MyString
>
> ny = FIX(MyString, TYPE=3)
>
> PRINT, 'nmx=',nmx
>
> PRINT, 'nmy=',nmy
>
> PRINT, 'nx=',nx
>
> PRINT, 'ny=',ny
>
> CLOSE, LandSatUnit
>
>
>
> If and when you have time you might look at the FORMAT keyword and you can learn a lot about it... however, the above code works fine. It occupies more lines, but it won't be dramatic in terms of CPU as compared to reading an image file of 7931x7001 pixel.
>
>
>
> Some quick answers to your format questions (only the things I know).
>
> - f6.3 represents a floating point number made out of 6 digits (dot included) of which 3 after the dot.
>
> - if the () have a number in front that represents the number of repetitions of what is in the parenthesis
>
> - the comma separates commands
>
> - I *think* that the / is indeed a new line
>
>
>
>> Does that help you?
>
>
>
> Well, I hope it helps you! ;-)
>
>
>
> For more info, look in the IDL help for "Format Codes" or follow:
>
> IDL Programming -> Concepts -> Format Codes
>
>
>
> It can get pretty complicated, but it is also very powerful.
>
>
>
> Cheers,
>
> h
|