0

我必须开发一个系统,用户将在其中指定一个起始范围和一个结束范围(通过范围,我的意思是说一个特定的时期,其中PERIOD 作为 YEAR AND MONTH 的串联给出)。例如,PERIOD = 201304,其中 2013 是用户输入的年份,04 是月份。用户最多只能指定 2 年的最大范围。

需要根据用户输入的范围来选择数据。问题是每当我尝试遍历该期间时,PERIOD 在 201312 到 201313 之后发生变化。我为用户选择的年份和月份(start_year、start_month、end_year、end_month)设置了单独的变量

我在那里做了一个 IF 循环,在其中我尝试执行以下操作

  FOR p_tmpyear = p_tempfrom TO p_tempto

        IF (p_monthfrm < 12) THEN
        LET p_yearfrm = p_yearfrm + 1
        LET p_monthfrm = 01
        LET p_fromperiod = p_yearfrm + 1,p_monthfrm >p_fromperiod is an integer storing concatenated Month and Year, to achieve the desired PERIOD format as mentioned above.
        LET p_tempfrom  = p_fromperiod
    END IF
    DISPLAY p_tmpyear
END FOR

我什至试过这个:

如果(p_fromperiod MOD p_yearfrm = 13)那么

    LET p_yearfrm = p_yearfrm + 1

    LET p_monthfrm = 01

    LET p_fromperiod = p_yearfrm + 1,p_monthfrm

到达 201212 到 201213 后,周期仍然会发生变化。我希望这是 201301。请帮忙。

4

1 回答 1

0

正如您可能已经猜到的那样,您的逻辑存在一些缺陷。第一个例子太难破译,而第二个例子表明你不明白 MOD 操作员做了什么。如果使用得当,在这种情况下,它将是 IF 变量 MOD 12 = 0 的形式,即每 12 个值做一些事情。

我认为您出错的地方是尝试在一个循环中完成所有操作。我会保持简单并将问题分解为两个嵌套循环,一个用于一年,一个用于一个月

DEFINE start_year, end_year, start_month, end_month INTEGER -- sample values 2012, 2013,7,6

DEFINE loop_year, loop_month INTEGER -- values used to loop through year and month respectively
DEFINE loop_first_month, loop_last_month INTEGER -- for each year, calc first month and last month

DEFINE period CHAR(6)

-- First loop over year
FOR loop_year = start_year TO end_year
    -- Calculate first and last month for the given year

    -- If first year, use passed in start month else use 1
    IF loop_year  = start_year THEN
        LET loop_first_month = start_month
    ELSE
        LET loop_first_month = 1
    END IF

    -- If last year, use passed in end month else use 12
    IF loop_year = end_year THEN
        LET loop_last_month = end_month
    ELSE
        LET loop_last_month = 12
    END IF

    -- Second loop over month
    FOR loop_month = loop_first_month TO loop_last_month
        LET period = loop_year USING "&&&&",loop_month USING "&&"
        DISPLAY period
    END FOR
END FOR

我还鼓励您在 4Js 网站http://www.4js.com/fjs_forum/以及此处的专用 4Js Genero 开发人员论坛中发布此类问题。大多数 Genero 开发人员应该知道该论坛并有权访问。

于 2015-06-29T21:42:39.190 回答