Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Keeping Query Params in a Hashtable

Demonstrates how to use a Chilkat Hashtable to hold query params and re-emit as a query param string.

Note: The ToQueryString method was added in Chilkat v9.5.0.92.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Hashtable,
  Chilkat.StringTable;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  ht: THashtable;
  qp: string;
  keys: TStringTable;
  numKeys: Integer;
  key: string;
  val: string;
  i: Integer;

begin
  success := False;

  ht := THashtable.Create;

  //  Add name/value pairs from an existing query param string where the values are already URL encoded.
  qp := 'txt=this%20is%20a%20test&color=blue&fruits=apples%26oranges';
  success := ht.AddQueryParams(qp);

  //  Add some additional name/value pairs.
  ht.AddStr('name','Jack Sparrow');
  ht.AddStr('movie','Pirates of the Carribean');

  //  Iterate over the hash table to show what we have..

  keys := TStringTable.Create;
  ht.GetKeys(keys);
  numKeys := keys.Count;

  i := 0;
  while i < numKeys do
    begin
      key := keys.StringAt(i);
      val := ht.LookupStr(key);
      WriteLn(key + ' = ' + val);
      i := i + 1;
    end;

  //  Output for the above loop:

  //  color = blue
  //  name = Jack Sparrow
  //  fruits = apples&oranges
  //  txt = this is a test
  //  movie = Pirates of the Carribean

  //  Get all name/value pairs as a query parm string with values URL encoded
  qp := ht.ToQueryString();
  WriteLn(qp);

  //  Result:
  //  color=blue&name=Jack%20Sparrow&fruits=apples%26oranges&txt=this%20is%20a%20test&movie=Pirates%20of%20the%20Carribean


  ht.Free;
  keys.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.