【问题标题】:Progress 4gl format string with constantsProgress 4gl 带常量的格式字符串
【发布时间】:2015-03-23 17:12:42
【问题描述】:

有没有办法用特定字符格式化一个正在进行的字符串?

一个示例是显示前 6 个号码带有 x 的 SSN。 我尝试使用 String 函数,但它不尊重使用格式发送的字母 x。

SSNString = '333224444'.
SSNString = String(SSNString, "xxx-xx-9999").
//This displays 333-22-4444 instead of xxx-xx-4444.

【问题讨论】:

  • 我认为你想要做的术语是“屏蔽”。

标签: progress-4gl openedge


【解决方案1】:

我不知道用字符串函数改变这种格式的方法。

如果你只想保留最后四位数,你可以试试这样:

SSNString = '333224444'.
SSNString = "xxx-xx-" + SUBSTRING(SSNString, 6, 4).

【讨论】:

    【解决方案2】:

    STRING 函数参数仅用于将输出字符串格式化为所需的模式,而不是“即时”替换其上的字符。您需要一个CHAR 变量来将数据库值放在上面,并且您可以使用OVERLAYSUBSTRING 函数覆盖字符串上的前五个字符以匹配您的条件。在你的例子中:

    SSNString = '333224444'.
    
    /* Choose the OVERLAY function or SUBSTRING function. You can pass either
       a FILL function call, one variable or a fixed string value to OVERLAY 
       or SUBSTRING function call. They'll behave exactly the same way. */
    
    OVERLAY(SSNString,1,5,'CHAR') = FILL('X',5).
    SUBSTRING(SSNString,1,5) = 'XXXXX'.
    
    /* At this point, SSNString is XXXXX4444 */
    
    SSNString = STRING(SSNString,'XXX-XX-9999').
    
    /* Here you'll have XXX-XX-4444 */
    
    MESSAGE SSNString
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    

    以更复杂和灵活的方式,您可以使用一个函数来返回您希望格式化的值,并且在您想将特殊格式应用于数据库字段值的情况下无需使用变量。

    FUNCTION formatSSNString RETURNS CHAR
        ( INPUT pSourceString   AS CHAR,
          INPUT pFormat         AS CHAR,
          INPUT pOverlayCount   AS INT,
          INPUT pStart          AS INT,
          INPUT pCharOverlay    AS CHAR ):
    
        DEF VAR cCharOutput     AS CHAR NO-UNDO.
    
        cCharOutput = pSourceString.
        OVERLAY(cCharOutput,pStart,pOverlayCount,'CHAR') = FILL(pCharOverlay,pOverlayCount).
        cCharOutput = STRING(cCharOutput,pFormat).
    
        RETURN cCharOutput.
    
    END FUNCTION.
    
    DEF VAR SSNString       AS CHAR NO-UNDO.
    
    SSNString = '333224444'.
    
    /* This returns XXX-XX-4444 */
    MESSAGE formatSSNString(SSNString, 'xxx-xx-9999', 5, 1, 'X') 
        VIEW-AS ALERT-BOX.
    
    /* This returns 33X-XX-X444 */
    MESSAGE formatSSNString(SSNString, 'xxx-xx-9999', 4, 3, 'X') 
        VIEW-AS ALERT-BOX.
    
    /* This returns 333-XX-4444 */
    MESSAGE formatSSNString(SSNString, 'xxx-xx-9999', 2, 4, 'X') 
        VIEW-AS ALERT-BOX.
    
    /* This returns 333-XX-44YY */
    MESSAGE formatSSNString(formatSSNString(SSNString, 'x(9)', 2, 4, 'X'), 'xxx-xx-9999', 2, 8, 'Y') 
        VIEW-AS ALERT-BOX.
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2023-03-20
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多