AX2012替换字符串或容器中的某些字符

时间:2014-09-08 16:19:43

标签: string replace axapta dynamics-ax-2012

我有一个xml文件,在写入文件时,我只想要自动化以下字符:

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G  H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
/ - ? : ( ) . , ‘ +, SPACE

因此,如果我有未经授权的角色,我会将其替换为授权用户,例如:

  • [é,è,ê]由e
  • 取代
  • [î,ï]取代了我
  • [ü,û]由u
  • 取代
  • ç由c
  • 取代
  • [#,! @]由SPACE替换

    所以如果我宣布四个容器

  • ,我应该如何继续
  • 容器CE = ['é','è','ê'];

  • 容器CI = ['î','ï'];
  • Container CRIEN = ['°','#','!','@'];
  • 容器CU = ['û','ü'];

文字示例:

anytype con = ['çdéjeunè 123 & south st @ Chicago, ILî 60652'];

3 个答案:

答案 0 :(得分:0)

其中一种方法:

static void ReplaceChars(Args _args)
{
    container fromCon   = ['é', 'è', 'ê', 'î', 'ï', 'ü', 'û', 'ç', '#', '!', '@'];
    container toCon     = ['e', 'e', 'e', 'i', 'i', 'u', 'u', 'c', ' ', ' ', ' '];
    str s = 'çdéjeunè 123 & south st @ Chicago, ILî 60652'; 
    int i, pos;

    info(s);

    for (i = 1; i <= strLen(s); i++)
    {
        pos = conFind(fromCon, subStr(s, i, 1));
        if (pos > 0)
        {
            s = subStr(s, 1, i - 1) + conPeek(toCon, pos) + subStr(s, i + 1, strLen(s) - i);
        }
    }

    info(s);
}

答案 1 :(得分:0)

另请看一下这篇文章: How do I remove diacritics from a string in dynamics ax

它使用静态方法

System.Globalization.CharUnicodeInfo::GetUnicodeCategory(Char _ch)

删除变音符号。它起初看起来有点复杂,但涵盖了您以后可能在XML文件中遇到的所有字符,而不是必须全部列出它们(您肯定会忘记一两个,稍后会导致异常)

由于您需要一些例外,例如#,!,@ ,您需要“手动”执行这些操作。一个很好的强大解决方案是上面描述的整齐方法的组合10p首先要做所有你想要变成空格的特殊字符,然后使用上面的方法(参见相关文章中的代码完成工作)来摆脱所有标准äÄïÏ等。

答案 2 :(得分:0)

使用我在第一个问题How do I remove diacritics from a string in dynamics ax中提供的答案,首先获得一个友好格式的字符串。

然后取出该字符串并使用strKeep(...)函数仅保留您想要的字符。 http://msdn.microsoft.com/en-us/library/aa867746.aspx

这是更新的工作。您应该将答案标记为正确,但除非他们不为您回答。这是更新的作业,它可以完成您的确切字符串:

static void JobRemoveDiacritics(Args _args)
{
    str strInput = 'çdéjeunè 123 & south st @ Chicago, ILî 60652';
    System.String input = strInput;
    str retVal;
    int i;

    System.Char c;
    System.Text.NormalizationForm FormD = System.Text.NormalizationForm::FormD;
    str normalizedString = input.Normalize(FormD);
    System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();

    for (i = 0; i <= strLen(normalizedString); i++)
    {
        c = System.Char::Parse(subStr(normalizedString, i, 1));

        if (System.Globalization.CharUnicodeInfo::GetUnicodeCategory(c) != System.Globalization.UnicodeCategory::NonSpacingMark)
        {
            stringBuilder.Append(c);
        }
    }

    input = stringBuilder.ToString();
    input = input.Normalize();
    retVal = input;
    retVal = strKeep(retVal, 'abcdefghijklmnopqrstuvwxyz0123456789/-?:().,\'+ ');

    info(strFmt("Before: '%1'", strInput));
    info(strFmt("After: '%1'", retVal));
}