[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 169
  • Last Modified:

Parameters

I have a function which accepts two string and two integer parameters. when i trace through the program the two strings and one of the integers is working properly however the last integer seems to be reset before passing back. so for example i am passing it one large string

passstring:='Tank 1 has 27 Litres'

I am spliting the string into two one passing 'Tank' and the other 'Litres'
i am passing back the tank number '1' as an integer but when i pass the result of 27 back the function deletes it before passing back. I have followed every step with watches and have even added a line v(set as a temp integer) = 27 and tried to pass it back but as soon as the code gets to total:=v the watch not only  declaires total as empty but also the variable v (i have declaired var total :integer in the function). Can anyone help  

PS i am using Delphi 5 and Windows 98
0
alshepstone
Asked:
alshepstone
1 Solution
 
MBoCommented:
some code required...
0
 
CesarioCommented:
Ok try this function :

Procedure ParseString(S:String; Var S1,S2:String; VAR Int1,int2:Integer);
VAR
 ms: TMemoryStream;
begin

  ms := tMemoryStream.Create;
  ms.Write ( s[1],Length(s));
  ms.position :=0;

  With tParser.Create ( ms ) DO
  Try
    S1 := TokenString;
    NextToken;
    Int1 := TokenInt;
    NextToken;
    S2 := TokenString;
    NextToken;
    Int2 := TokenInt;
  Finally
    free;
  End;

end;


procedure TForm1.Button1Click(Sender: TObject);
VAR
  s1,s2: String;
  v1,V2: Integer;
begin
  ParseString ( 'Tank 1 has 27 Litres',s1,s2,v1,v2);
  ShowMessage ( S1+#13+IntToStr(v1)+#13+S2+#13+IntTostr(v2));
end;
0
 
DumaniCommented:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  with TStringList.Create do
  try
    Text := StringReplace('Tank 1 has 27 Litres', '', #13#10, [rfReplaceAll]);
    for i := 0 to Count - 1 do
    begin
{
      Strings[i] := Trim(Strings[i]);
      you can also use this to trim before you check...

      Strings[0] is Tank
      Strings[1] is 1
      Strings[2] is has
      Strings[3] is 27
      Strings[4] is Litres
}
    end;
  finally
    Free;
  end;
end;
0
 
jswebyCommented:
Is it possible that there is a call inside your function to another procedure or function that could be changing the value of the passed parameter v?

As MBo said, this would be much easier with the code of your function.

J.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now