X
PrevPrev Go to previous topic
NextNext Go to next topic
Last Post 13 Sep 2007 01:18 AM by  anon
Indexing problem for 3 weeks..! Please help me out!!!
 1 Replies
Sort:
You are not authorized to post a reply.
Author Messages

anon



New Member


Posts:
New Member


--
13 Sep 2007 01:18 AM
    I faced this problem about 3 weeks ago, but I am still there... T.T I was so urgent and I just finished with the way of the Old Stone Age. I spent several hours to finish up this things with MS Excel... T.T. However, I got a chance to do the same thing recentely , I want to make it with IDL this time. Please give me any idea. What I am trying to do now is to read in 16 lines at one time and compare the values of the second column for all 16 lines. Then, I either extract the one good value for output or I set the output to be unchanged. Once I've figured out what I want to output, I output all 16 lines at once and output the same value to the third column for each line. This exmaple data file is simplified for test simulation. With this file, I am testing with 5 lines instead of 16. aaa.txt 01 -999.9 02 -999.9 03 -999.9 04 0.13 05 -999.9 06 -999.9 07 0.17 08 -999.9 09 -999.9 10 -999.9 11 -999.9 12 -999.9 13 32.77 14 -999.9 15 -999.9 This is the array that I want to make. target.txt 01 -999.9 0.13 02 -999.9 0.13 03 -999.9 0.13 04 0.13 0.13 05 -999.9 0.13 06 -999.9 0.17 07 0.17 0.17 08 -999.9 0.17 09 -999.9 0.17 10 -999.9 0.17 11 -999.9 -999.9 12 -999.9 -999.9 13 32.77 32.77 14 -999.9 -999.9 15 -999.9 -999.9 I coded as shown below. However, I found I am doing something different. I have changed several part of this code, but my trial has not been successful so far. Please give me any idea, recommendable functions, indexing tips, etc... Thanks. Harry ---------------------------------------------------------------------- pro albedo_final close, /all data1 = 'D:\MODIS_ALL\aaa.txt' num_data = file_lines(data1) albedo_arr = fltarr(2, num_data) albedo_fin = fltarr(3, num_data) albedo_OK = 0.0 openr, 2, data1 readf, 2, albedo_arr close, 2 c1 = 0 openw, 1, 'target.txt' for i= 0, num_data-1 do begin dd = 5*(c1+1) +1 if albedo_arr[0, i] lt DD then begin if (albedo_arr[1,i] gt 0 and albedo_arr[1,i] lt 1) then begin albedo_OK = albedo_arr[1,i] print, albedo_OK endif albedo_fin[0:1, i] = albedo_arr[0:1, i] albedo_fin[2, i] = albedo_OK endif c1 = c1+1 endfor print, albedo_fin ;printf, 1, albedo_fin ;close, 1 print, " It's done!" end This is the last result. target.txt 1.00000 -999.900 0.000000 2.00000 -999.900 0.000000 3.00000 -999.900 0.000000 4.00000 0.130000 0.130000 5.00000 -999.900 0.130000 6.00000 -999.900 0.130000 7.00000 0.170000 0.170000 8.00000 -999.900 0.170000 9.00000 -999.900 0.170000 10.0000 -999.900 0.170000 11.0000 -999.900 0.170000 12.0000 -999.900 0.170000 13.0000 -999.900 0.170000 14.0000 -999.900 0.170000 15.0000 -999.900 0.170000

    Deleted User



    New Member


    Posts:
    New Member


    --
    13 Sep 2007 01:18 AM
    I think this should not be so hard to debug if you would use breakpoints. Put a breakpoint (F9 function key in the first line inside your FOR loop, then use 'F10' function key to step through your code line by line. You will see very quickly how seldom this condition: if (albedo_arr[1,i] gt 0 and albedo_arr[1,i] lt 1) is true, and then you will understand how rarely the value of 'albedo_OK' changes from its initial value of 0.0 to 0.13 and eventually 0.17. I would help you find the better math algorithm, but I have no idea what the logic should be that should get lines 11 - 15 to display the values that you seem to want. But, if you can master the IDL debugger with its breakpoints and STEPOVER/STEPINTO options, then you should be able to see what is going bad with your logic in any single line of your FOR loop. Good luck, James Jones
    You are not authorized to post a reply.