75 lines
2.3 KiB
ObjectPascal
75 lines
2.3 KiB
ObjectPascal
program Project1;
|
|
|
|
{$H+}//Use ansistrings
|
|
uses
|
|
Classes,
|
|
SysUtils,
|
|
StrUtils;
|
|
|
|
procedure AlignByColumn(Align: TAlignment);
|
|
const
|
|
TextToAlign =
|
|
'Given$a$text$file$of$many$lines,$where$fields$within$a$line$'#$D#$A +
|
|
'are$delineated$by$a$single$''dollar''$character,$write$a$program'#$D#$A +
|
|
'that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$'#$D#$A +
|
|
'column$are$separated$by$at$least$one$space.'#$D#$A +
|
|
'Further,$allow$for$each$word$in$a$column$to$be$either$left$'#$D#$A +
|
|
'justified,$right$justified,$or$center$justified$within$its$column.';
|
|
var
|
|
TextLine: TStringList;
|
|
TextLines: array of TStringList;
|
|
OutPutString, EmptyString, Item: string;
|
|
MaxLength, i, j: Int32;
|
|
begin
|
|
try
|
|
MaxLength := 0;
|
|
TextLine := TStringList.Create;
|
|
TextLine.Text := TextToAlign;
|
|
setlength(Textlines, TextLine.Count);
|
|
for i := 0 to TextLine.Count - 1 do
|
|
begin
|
|
Textlines[i] := TStringList.Create;
|
|
Textlines[i].Text := AnsiReplaceStr(TextLine[i], '$', #$D#$A);
|
|
end;
|
|
|
|
for i := 0 to High(TextLines) do
|
|
for j := 0 to Textlines[i].Count - 1 do
|
|
if MaxLength < Length(TextLines[i][j]) then
|
|
MaxLength := Length(TextLines[i][j]);
|
|
if MaxLength > 0 then
|
|
MaxLength := MaxLength + 2; // Add two empty spaces to it
|
|
|
|
for i := 0 to High(TextLines) do
|
|
begin
|
|
OutPutString := '';
|
|
for j := 0 to Textlines[i].Count - 1 do
|
|
begin
|
|
EmptyString := StringOfChar(' ', MaxLength);
|
|
if j <> 0 then
|
|
EmptyString[1] := '|';
|
|
Item := TextLines[i][j];
|
|
case Align of
|
|
taLeftJustify: Move(Item[1], EmptyString[2], Length(Item));
|
|
taRightJustify: Move(Item[1], EmptyString[MaxLength - Length(Item) + 1],
|
|
Length(Item));
|
|
taCenter: Move(Item[1], EmptyString[(MaxLength - Length(Item) + 1) div
|
|
2 + 1], Length(Item));
|
|
end;
|
|
OutPutString := OutPutString + EmptyString;
|
|
end;
|
|
writeln(OutPutString);
|
|
end;
|
|
finally
|
|
writeln;
|
|
FreeAndNil(TextLine);
|
|
for i := High(TextLines) downto 0 do
|
|
FreeAndNil(TextLines[i]);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
AlignByColumn(taLeftJustify);
|
|
AlignByColumn(taCenter);
|
|
AlignByColumn(taRightJustify);
|
|
end.
|