我有一个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
因此,如果我有未经授权的角色,我会将其替换为授权用户,例如:
[#,! @]由SPACE替换
所以如果我宣布四个容器
容器CE = ['é','è','ê'];
文字示例:
anytype con = ['çdéjeunè 123 & south st @ Chicago, ILî 60652'];
答案 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));
}