Array 上 13 个月的标题
Headings for 13 months on Array
我想知道是否有人可以帮助我,为什么下面代码的 headers 在 13 个月内没有正确创建它们。我想添加Jan(LY)
Feb(LY)
......直到Jan(TY)
.
请看下面的标题代码,
//Headings
J:=0;
for I:=12 downto 0 do
begin
J:=J+1;
Amonth:=IntToStr(J);
If basemonth-12 <=0 then Harray[J]:=Basemonth-I+13;
If basemonth-12 > 0 then Harray[J]:=Basemonth-I;
If Harray[J] >13 then Harray[J]:=Harray[J]-13;
//showmessage(INTTOSTR(Harray[J]));
end;
Heading1:=Monthcalc(Harray[1]);
Heading2:=Monthcalc(Harray[2]);
Heading3:=Monthcalc(Harray[3]);
Heading4:=Monthcalc(Harray[4]);
Heading5:=Monthcalc(Harray[5]);
Heading6:=Monthcalc(Harray[6]);
Heading7:=Monthcalc(Harray[7]);
Heading8:=Monthcalc(Harray[8]);
Heading9:=Monthcalc(Harray[9]);
Heading10:=Monthcalc(Harray[10]);
Heading11:=Monthcalc(Harray[11]);
Heading12:=Monthcalc(Harray[12]);
Heading13:=Monthcalc(Harray[13]);
// showmessage(DateToStr(startdate));
// showmessage(DateToStr(enddate));
// Showmassage('test');
end;
Function Monthcalc(Amonth:integer):String;
begin
Monthname[1]:='Jan';
Monthname[2]:='Feb';
Monthname[3]:='Mar';
Monthname[4]:='Apr';
Monthname[5]:='May';
Monthname[6]:='Jun';
Monthname[7]:='Jul';
Monthname[8]:='Aug';
Monthname[9]:='Sep';
Monthname[10]:='Oct';
Monthname[11]:='Nov';
Monthname[12]:='Dec';
Monthname[13]:='LY';
Result:=Monthname[Amonth];
// showmessage(DateToStr(startdate));
// showmessage(DateToStr(enddate));
// Showmassage('test');
end;
我首先建议您将月份名称数组更改为常量:
const
MonthNames: array[1..12] of string = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
接下来我建议进行一些更改以避免 13 个月的硬编码时间跨度,因为正如您现在所经历的那样,需求确实会发生变化,而硬编码的内容总是比可变的内容更难更改。
声明一个变量,例如MonthSpan: integer
表示应包括多少个月(将来可能会出现 3 个月、6 个月等替代时间跨度的新要求)。同样用动态数组替换所有 Heading1, Heading2 ...
变量,命名为 Headings
:
Monthspan: integer;
Headings: array of string;
现在我只是在开始时初始化这些
Monthspan := 13;
SetLength(Headings, Monthspan);
您之前已经计算过 StartDate: TDate
,因此使用它和现有变量 M
我们现在可以编写一个简单的循环来获取标题:
M := MonthOf(StartDate);
for i := 0 to MonthSpan-1 do
begin
Headings[i] := MonthNames[(M + i) mod 12];
Memo1.Lines.Add(Headings[i]);
end;
MonthOf()
是单位System.DateUtils
中的一个函数。
以上内容替换了 Function MonthCalc()
,并且您的所有代码都在 //Headings
注释下方。在您的代码的其他地方,您使用的地方,例如Heading1
您现在使用 Headings[0](动态数组总是从 0 开始索引)等
我不确定 HArray[]
的目的是什么,但确定标题不需要它。
我想知道是否有人可以帮助我,为什么下面代码的 headers 在 13 个月内没有正确创建它们。我想添加Jan(LY)
Feb(LY)
......直到Jan(TY)
.
请看下面的标题代码,
//Headings
J:=0;
for I:=12 downto 0 do
begin
J:=J+1;
Amonth:=IntToStr(J);
If basemonth-12 <=0 then Harray[J]:=Basemonth-I+13;
If basemonth-12 > 0 then Harray[J]:=Basemonth-I;
If Harray[J] >13 then Harray[J]:=Harray[J]-13;
//showmessage(INTTOSTR(Harray[J]));
end;
Heading1:=Monthcalc(Harray[1]);
Heading2:=Monthcalc(Harray[2]);
Heading3:=Monthcalc(Harray[3]);
Heading4:=Monthcalc(Harray[4]);
Heading5:=Monthcalc(Harray[5]);
Heading6:=Monthcalc(Harray[6]);
Heading7:=Monthcalc(Harray[7]);
Heading8:=Monthcalc(Harray[8]);
Heading9:=Monthcalc(Harray[9]);
Heading10:=Monthcalc(Harray[10]);
Heading11:=Monthcalc(Harray[11]);
Heading12:=Monthcalc(Harray[12]);
Heading13:=Monthcalc(Harray[13]);
// showmessage(DateToStr(startdate));
// showmessage(DateToStr(enddate));
// Showmassage('test');
end;
Function Monthcalc(Amonth:integer):String;
begin
Monthname[1]:='Jan';
Monthname[2]:='Feb';
Monthname[3]:='Mar';
Monthname[4]:='Apr';
Monthname[5]:='May';
Monthname[6]:='Jun';
Monthname[7]:='Jul';
Monthname[8]:='Aug';
Monthname[9]:='Sep';
Monthname[10]:='Oct';
Monthname[11]:='Nov';
Monthname[12]:='Dec';
Monthname[13]:='LY';
Result:=Monthname[Amonth];
// showmessage(DateToStr(startdate));
// showmessage(DateToStr(enddate));
// Showmassage('test');
end;
我首先建议您将月份名称数组更改为常量:
const
MonthNames: array[1..12] of string = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
接下来我建议进行一些更改以避免 13 个月的硬编码时间跨度,因为正如您现在所经历的那样,需求确实会发生变化,而硬编码的内容总是比可变的内容更难更改。
声明一个变量,例如MonthSpan: integer
表示应包括多少个月(将来可能会出现 3 个月、6 个月等替代时间跨度的新要求)。同样用动态数组替换所有 Heading1, Heading2 ...
变量,命名为 Headings
:
Monthspan: integer;
Headings: array of string;
现在我只是在开始时初始化这些
Monthspan := 13;
SetLength(Headings, Monthspan);
您之前已经计算过 StartDate: TDate
,因此使用它和现有变量 M
我们现在可以编写一个简单的循环来获取标题:
M := MonthOf(StartDate);
for i := 0 to MonthSpan-1 do
begin
Headings[i] := MonthNames[(M + i) mod 12];
Memo1.Lines.Add(Headings[i]);
end;
MonthOf()
是单位System.DateUtils
中的一个函数。
以上内容替换了 Function MonthCalc()
,并且您的所有代码都在 //Headings
注释下方。在您的代码的其他地方,您使用的地方,例如Heading1
您现在使用 Headings[0](动态数组总是从 0 开始索引)等
我不确定 HArray[]
的目的是什么,但确定标题不需要它。