You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QlikSense脚本中批量移除所有列的乱码字符并转换数据?

QlikSense脚本批量移除乱码字符的解决方案

针对所有列存在类似��345的乱码场景,可通过批量遍历字段+字符串过滤函数实现一次性处理,以下是几种实用方案:

方案1:使用KeepChar保留指定有效字符

适合明确需要保留的字符类型(如数字、字母)的场景,直接移除所有不在指定集合内的字符:

// 1. 加载原始数据(替换为你的数据源)
RawData:
LOAD * FROM [your_source.qvd] (qvd);

// 2. 遍历所有字段批量清洗
FOR each vField in FieldList('RawData')
    // 生成清洗后的临时表
    RawData_Clean:
    NOCONCATENATE LOAD
        *,
        // 保留数字和大小写字母,可根据需求扩展字符集(如添加中文、符号)
        KeepChar($(vField), '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') as [$(vField)_Clean]
    RESIDENT RawData;

    // 删除原始表,重命名字段并保留清洗后的数据
    DROP TABLE RawData;
    RENAME TABLE RawData_Clean TO RawData;
    RENAME FIELD [$(vField)_Clean] TO $(vField);
NEXT vField

方案2:使用正则表达式精准过滤(RegExpReplace)

适合需要更复杂规则的场景(如移除所有非打印字符、特定乱码符号):

// 1. 加载原始数据
RawData:
LOAD * FROM [your_source.csv] (txt, utf8, embedded labels);

// 2. 批量正则清洗
FOR each vField in FieldList('RawData')
    RawData_Clean:
    NOCONCATENATE LOAD
        *,
        // 移除所有非数字、非字母的字符,可修改正则表达式适配你的需求
        RegExpReplace($(vField), '[^0-9A-Za-z]', '') as [$(vField)_Clean]
    RESIDENT RawData;

    DROP TABLE RawData;
    RENAME TABLE RawData_Clean TO RawData;
    RENAME FIELD [$(vField)_Clean] TO $(vField);
NEXT vField

方案3:加载源数据时直接处理(性能更优)

如果数据量较大,建议在首次加载时就完成清洗,避免二次RESIDENT加载的性能损耗:

// 1. 先获取源数据的所有字段名
TempFieldList:
LOAD Distinct FieldName() as FieldName FROM [your_source.csv] (txt, utf8, embedded labels);

// 2. 动态构建清洗后的LOAD字段语句
Let vLoadStatement = '';
FOR each vField in FieldList('TempFieldList')
    // 拼接每个字段的清洗逻辑
    Let vLoadStatement = vLoadStatement & ', KeepChar(' & vField & ', ''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'') as ' & vField & Chr(10);
NEXT vField

// 3. 加载清洗后的最终数据
CleanData:
LOAD
    // 去掉语句开头多余的逗号
    Mid('$(vLoadStatement)', 2)
FROM [your_source.csv] (txt, utf8, embedded labels);

// 清理临时表
DROP TABLE TempFieldList;

关键注意事项

  • 字符集调整:根据实际业务需求修改KeepChar的保留字符集或正则表达式,例如需要保留中文可添加'\u4e00-\u9fa5'到正则规则中。
  • 乱码定位:若乱码是特定的不可见控制字符,可先用Asc()函数获取字符的ASCII码,再用PurgeChar或Replace精准移除。
  • 表名与字段名:确保FieldList()中指定的表名与你的原始表一致,避免字段遍历错误。

内容的提问来源于stack exchange,提问作者Seemakurthi Jaswanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:53:18