Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
74
Task/Align-columns/Pascal/align-columns.pas
Normal file
74
Task/Align-columns/Pascal/align-columns.pas
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue