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

如何从SAP Data Services读取含可变6位时间的日期格式文件名

在SAP Data Services中读取带可变6位时间的日期命名文件

我来帮你解决这个SAP Data Services里的文件名匹配问题,刚好之前处理过类似场景。你遇到的核心问题是:直接用*.csv无法精准锁定指定日期+可变6位时间的文件,而你之前的脚本写法没用到Data Services正确的通配符规则。

方案一:用通配符快速匹配(简单直接)

SAP Data Services的文件名属性支持用?匹配单个任意字符,刚好可以对应你那6位可变的时间数字。

你可以直接在平面文件的「文件名」属性里写:

File_$(to_char(sysdate()-1, 'YYYYMMDD'))_??????.csv

如果要通过脚本变量赋值,就把代码改成:

$Filename = 'File_' || to_char(sysdate()-1, 'YYYYMMDD') || '_??????.csv';

然后把平面文件的文件名属性绑定到$Filename变量即可。这里的??????正好匹配任意6个字符(你的6位时间数字),完美覆盖需求。

方案二:用正则表达式严格过滤(更严谨)

如果需要确保时间部分是纯数字,而不是任意6个字符,可以结合directory_list和正则函数来精准筛选:

  1. 先获取目标目录下的所有CSV文件:
$FileList = directory_list('你的文件存放路径', '*.csv', 0);
  1. 构造匹配前一天日期+6位数字的正则规则,遍历文件列表筛选:
$TargetDate = to_char(sysdate()-1, 'YYYYMMDD');
// 正则规则:匹配File_日期_6位数字.csv
$Pattern = 'File_' || $TargetDate || '_[0-9]{6}\.csv';

// 遍历文件列表找匹配项
for ($i = 1; $i <= length($FileList); $i++) {
    $CurrentFile = $FileList[$i];
    if (regex_match($CurrentFile, $Pattern, 0)) {
        $Filename = $CurrentFile;
        break; // 找到第一个匹配文件就跳出,按需调整逻辑
    }
}
  1. 最后把平面文件的文件名设置为$Filename即可。

为什么你之前的脚本不行?

你之前写的'*.csv'会匹配目录下所有CSV文件,而不是限定在指定日期之后的6位时间部分。而且Data Services里的*是匹配任意长度的字符,不是你需要的固定6位,所以用??????才是正确的做法。

注意事项

  • 确认sysdate()-1的时区和文件名里的日期时区一致,避免出现日期不匹配的跨天问题。
  • 如果目录下有多个同一天的目标文件,方案一会一次性读取所有符合条件的文件(需要在平面文件设置里开启「读取多个文件」);方案二则可以灵活选择读取第一个或者全部,根据你的业务需求调整循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:22:42