Mega Code Archive

 
Categories / Delphi / Examples
 

Arrayparams

RICHARD'S DELPHI TIPS AND TRICKS Last update October 1998 Passing Arrays As Parameters In order to pass an array as a parameter to a function, we must pass it as what is known as an 'open array' -that is, we must pass it as an array that has no indication of size, as in 'array of Char' or array of Integer' etc. Both the FORMAL declaration in the list of function headers (usually at the top of the program declared as methods of a form object) AND the actual parameters of the procedure or function must BOTH conform to this rule. One thing you need to be careful of is declaring arrays to be tempArray: array[1..n] rather than tempArray: array[0..n] because while you can do that it can create problems when doing things like tempString := String(tempArray); (So restrict yourself to array[0..n])! Here's an example from a real program: const chunkLen = 100; type TForm1 = class(TForm) . . function EditLine(tempLine: array of Char; i: Integer): String; end; procedure CallingFunction; var srcChunk: array[0..chunkLen] of Char; i: Integer; tempString: String; begin {get text from somewhere and put it in srcChunk...} srcChunk[i] := #0; tempString := EditLine(srcChunk, i); end; function TForm1.EditLine(tempLine: array of Char; i: Integer): String; {this function takes as a parameter a char array which is a single line (aka 'chunk') of text. At this point, however, we may have 'part-words' at the beginning and end of the line, so this routine strips away these unwanted characters to produce lines that start and end with whole words. The resulting 'edited' line is returned as a string...} var j, n: Integer; tempArray: array[0..chunkLen] of Char; tempString: String; begin {firstly go forward in the sourcefile 'chunk' until you get to a space...} j := i; i := 0; while not(tempLine[i] = ' ') do begin Inc(i); if (i >= j) then break; end; Inc(i); n := 0; {now put the whole of what remains into tempArray...} while (i <= j) do begin tempArray[n] := tempLine[i]; Inc(i); Inc(n); end; {and then backtrack from the END of temparray, until you get to a space, placing a NULL character (#0) in the last 'non-space' position...} while not(tempArray[n] = ' ') do begin Dec(n); if (n <= 0) then break; end; tempArray[n] := #0; tempString := string(tempArray); Result := tempString; end; **************************************************************** AND YOU CAN'T RETURN AN ARRAY from A FUNCTION IN DELPHI, unfortunately (unless you use some very unweildy and therefore possibly inadvisable pointer syntax) so if you really need to return an array from a function then the best bet might be to have the array as a global variable...