James, I remember going through some similar motions as you are. Looks like you are searching for a form of indexing your record fields. So many good suggestions, I had to join the fray and try something... My preferred approach would also be an ordinal type for the axes and a record variant, as already suggested. Objects and advanced records would be fine too. That way you get to keep both worlds while evolving your software to a more elegant approach along the lines of some of the suggested solutions. Here is something I tried on top of your example to make sure it actually works.
program example1; Type Axis_Name=(anX,anY,anZ,anA,anB,anC); Axis_Array=array[Axis_Name] of Double; Axis_Record = Record X,Y,Z,A,B,C: Double; End; Axis_Record_variant = Record case boolean of false: (AxRec:Axis_Record); true: (AxArr:Axis_Array); End; Var AxisValueVar : Axis_Record_variant; AxisValue : Axis_Record absolute AxisValueVar.AxRec; //Instead of this: Procedure ShowAxis(Axisletter:Char); Begin If AxisLetter = 'X' Then Writeln(AxisValue.X); If AxisLetter = 'Y' Then Writeln(AxisValue.Y); If AxisLetter = 'Z' Then Writeln(AxisValue.Z); If AxisLetter = 'A' Then Writeln(AxisValue.A); If AxisLetter = 'B' Then Writeln(AxisValue.B); If AxisLetter = 'C' Then Writeln(AxisValue.C); End; //I would rather have something like this: Procedure ShowAxisVariant(AxisName:Axis_Name); Begin Writeln(AxisValueVar.AxArr[AxisName]); End; begin AxisValue.Z := 1234.5678; ShowAxis('Z'); ShowAxisVariant(anZ); end. On Sun, Dec 20, 2020 at 2:01 PM James Richters via fpc-pascal < fpc-pascal@lists.freepascal.org> wrote: > Yes, I was trying to keep my data structure, because there were thousands > of occurrences .. > This project has had that structure since Turbo Pascal back in the 80s > when it only had 3 axis > It seemed like a good way to have variables all with the same name, and > back then it wasn't so bad to have repeated code, > but now I have 9 axis and it's getting ridiculous.. once I realized that > Arrays would allow me to simplify things greatly, > it turned out to not be so bad to change it... just a bunch of global > search and replaces and a little fixing here and there that actually made > it cleaner, > and the whole project has been changed over in a relatively short amount > of time... and now I can start consolidating all those functions and > procedures. > It was way less work to just change it all to a better structure than it > was to work around it. > > James > > >I think this is a typical example where properly thinking about a > solution for a programming issue BEFORE going with > >what seems as the logical choice at first glance leads to a much simpler > solution without coming up with all kinds of fancy workarounds... > > _______________________________________________ > fpc-pascal maillist - fpc-pascal@lists.freepascal.org > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal >
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal