[Lazarus] Iterate TStringToStringTree
Mattias Gaertner
nc-gaertnma at netcologne.de
Tue Jun 15 09:54:24 CEST 2010
You may want to look at the TDBF component. I think the package is called
lazdbf or dbflaz.
Michael.
On Tue, 15 Jun 2010, Peter E Williams wrote:
> Hi All,
>
> I really need to know what is the Dbase3/4 unit for Lazarus/Free Pascal
> and where is the sample project for manipulating them. I found it
> somewhere on the lazarus website but don't know where. I hope that it is
> okay for me to post some of my code which uses the XBase1 unit in Delphi
> 5 Enterprise which I am porting to my Hexxpawn8 game (which is cross
> platform open source).
>
> I use Dbase3/4+ files to store board patterns for my game which is sort
> of a cross between the pawns in Chess and checkers, using AI logic
> against the computer. (I chose Dbase format because it was the single
> most common database file format at the time.)
>
> What is the replacement unit for XBase1 for using Dbase3/4 files, and
> the functions/procedures etc to replace these calls to XBase1 ?
>
> How do I do the following:
>
> // declaring a Dbase file -- TXBase (what is the equivalent in Lazarus?)
> // how do I copy a blank.dfg file to hex8.bdf (Copyfile) ???
> // I need to Goto to the Bottom of File (HexxData.GotoBOF;)
> // I need to call a function GetFieldByName passing a string as the
> field name and comparing it with a character
> // I need to Goto the Next record (HexxData.GotoNext;)
> // I need to Get the Record # (HexxData.RecNo;)
> // and test the Dbase.EOF (not HexxData.EOF)
> // and Append a Blank record (HexxData.AppendBlank;)
> // save an integer to a Field (HexxData.UpdFieldStr('this_game',
> inttostr(pattern.this_game)); )
> // and Goto to the Record number (HexxData.GotoRecord(hexxdata_rec_no);)
>
> See examples of my code below
>
> Unit hexboard2.pas
>
> // declaring a Dbase file -- TXBase
> var
> HexxData, TraceFile: TXBase;
>
> procedure Thxboard.Open_db;
> begin
> if not fileExists('hex8.dbf') then
> CopyFile('blank.dbf', 'hex8.dbf', false);
> // how do I copy a blank.dfg file to hex8.bdf ???
>
> HexxData := TXBase.create(nil);
> // I assume that this is how to create a replacement for a Dbase file
> HexxData.FileName := 'hex8.dbf';
> HexxData.Active := true;
> HexxData.GotoBOF;
> // I need to Goto to the Bottom of File
> end; { Open_db }
>
> function Thxboard.pattern_is_db_current(pattern1: pattern_type):
> boolean;
> var
> str_x, str_o: array[1..8] of string;
> begin
> pattern_is_db_current := false;
> str(pattern1.x_piece[1], str_x[1]);
> // ..
> if (HexxData.GetFieldByName('x1_pos') = str_x[1]) and
>
> // I need to call a function GetFieldByName passing a string as the
> field name and comparing it with a character
>
> //..
> (HexxData.GetFieldByName('x8_pos') = str_x[8]) then
> if (HexxData.GetFieldByName('o1_pos') = str_o[1]) and
> //..
> (HexxData.GetFieldByName('o8_pos') = str_o[8]) then
> pattern_is_db_current := true;
> end; { pattern_is_db_current }
> {---------------------------------------------------------}
>
> procedure Thxboard.Find_pattern(var pattern1: pattern_type;
> var found: boolean);
> begin
> //,,
> HexxData.GotoNext;
>
> // I need to Goto the Next record
>
> end; { Find_pattern }
> {---------------------------------------------------------}
>
> procedure Thxboard.write_updated_pattern(var pattern1: pattern_type);
> var
> found: boolean;
> begin
> found := false;
> if pattern_is_db_current(pattern1) then
> { save pattern options to db }
> begin
> save_options(pattern1);
>
> hexxdata_rec_no := HexxData.RecNo;
> // I need to Get the Record #
> close_db;
> if trace_moves then
> //..
> open_db;
> HexxData.GotoRecord(hexxdata_rec_no);
> // then I need to Goto to record #
> end
> else
> { save entire pattern to db };
> begin
> while (not HexxData.EOF) and not found do
>
> // and test the Dbase.EOF (end of file)
> begin
> //..
> end;
> if not found then
> begin
> { --- add a new record --- }
> HexxData.AppendBlank;
>
> // and Append a Blank record
>
> save_options(pattern1);
> HexxData.UpdFieldStr('this_game', inttostr(pattern.this_game));
>
> // save an integer to a Field
>
> //..
> hexxdata_rec_no := HexxData.RecNo;
> close_db;
> if trace_moves then
> //..
> open_db;
> HexxData.GotoRecord(hexxdata_rec_no);
> // and Goto to the Record number
> end; // if found
> end; // else
> end; { write_updated_pattern }
> {---------------------------------------------------------}
> --
> Proudly developing Quality Cross Platform Open Source Games
> Since 1970 with a Commodore PET 4016 with 16 KRAM
> http://pews-freeware-games.org (<--- brand new)
>
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>
More information about the Lazarus
mailing list