[fpc-pascal] sorting and merging array of records
Tomas Hajny
XHajT03 at hajny.biz
Tue Jan 10 09:38:05 CET 2012
On Tue, January 10, 2012 05:14, waldo kitty wrote:
Hi,
.
.
> are certain enforced limits on these lines... as such, i have defined a
> record
>
> type
> sat_name = string[25];
> line_data = string[69];
> two_line = array [1..2] of line_data;
> three_line_data = record
> satname : sat_name;
> satdata : two_line;
> end;
>
> const
> max_sats = 65536;
>
> var
> sat_data : array [1..max_sats] of three_line_data;
> abuf : two_line;
> new_data : three_line_data;
>
> right now i'm loading the array via a simple readln into the array
> elements...
>
> Procedure Input_Satellite(index : word);
> begin
> if not EOF(fsat) then
> begin
> Readln(fsat,sat_data[index].satname);
> Readln(fsat,sat_data[index].satdata[1]);
> Readln(fsat,sat_data[index].satdata[2]);
> end; {if}
> end; {Procedure Input_Satellite}
>
> this is fine for the initial loading but i'm needing to read additional
> TLE
> files and insert those records into the above array... my problem is that
> i need
> the array sorted on a sectional value from sat_data[index].satdata[1]
>
> sat_catnr := Copy(abuf[1],3,5);
> and
> new_catnr := Copy(abuf[1],3,5);
>
> which are loaded and compared between sat_data[index].sat_data and
> new_data.sat_data
>
> in the case of collisions (same catnr), i need to choose between the
> greater of
> a pair of values from the stored record (sat_data) and the new record
> (new_data)
> read from a file...
>
> Function Real_Value(buffer : string;
> start,length : integer) : double;
> var
> result : integer;
> answer : double;
> begin
> buffer := Copy(buffer,start,length);
> Convert_Blanks(buffer);
> if buffer = '' then
> buffer := '0';
> Val(buffer,answer,result);
> if result = 0 then
> Real_Value := answer
> else
> Real_Value := 0.0;
> end; {Function Real_Value}
>
>
> via...
>
> sat_epoch := Real_Value(abuf[1],19,14);
> and
> new_epoch := Real_Value(abuf[1],19,14);
>
>
> which are loaded and compared between sat_data[index].satdata and
> new_data.satdata...
>
> my problem is that i cannot find any similar examples where an array of
> records
> is built, sorted and duplicates are eliminated based on specific factors
> of the
> two records being compared...
>
> uncle has been failing me for the last several hours and i'm loosing sight
> of
> what i'm trying to get done... i've seen references to using a
> tstringlinst as
> well as something apparently non-existent called a tarray... in all of the
> stuff
> i've seen on tstringlinst, there's nothing that i find that is close to
> what i'm
> (thinking i'm) looking for... and here's where i keep getting diverted
> away from
> the final goal due to trying to follow everything else :/
I've tried something similar recently. After trying to figure out how to
use the classes included with FPC and build something on top of them, I
resorted to using the old TP/BP compatible object model with
TSortedCollection (as provided in unit objects).
Tomas
More information about the fpc-pascal
mailing list