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

OpenEdge技术问题:如何从CSV文件中读取特定值?

从CSV读取特定值的解决方案

你的现有代码会将CSV的所有数据全量导入临时表,若仅需读取特定值,可通过以下几种方式实现:

1. 仅导入需要的特定列

先定义仅包含目标字段的临时表结构,再在IMPORT语句中明确指定要导入的字段,避免全量导入:

/* 定义临时表,只保留需要的字段 */
DEF TEMP-TABLE ttTable
  FIELD custId AS INTEGER
  FIELD custName AS CHARACTER.

INPUT VALUE FROM cFilePath.
REPEAT:
  CREATE ttTable.
  /* 仅导入custId和custName列,需匹配CSV中对应列的位置 */
  IMPORT ttTable.custId, ttTable.custName DELIMITER ",".
END.
INPUT CLOSE.

/* 查看导入的特定值 */
FOR EACH ttTable:
  DISPLAY ttTable.custId ttTable.custName.
END.

2. 全量导入后筛选特定值

若需基于条件提取特定记录(比如某ID对应的行),可先全量导入,再通过WHERE条件筛选:

DEF TEMP-TABLE ttTable
  FIELD custId AS INTEGER
  FIELD custName AS CHARACTER
  FIELD custEmail AS CHARACTER.

INPUT VALUE FROM cFilePath.
REPEAT:
  CREATE ttTable.
  IMPORT DELIMITER ",".
END.
INPUT CLOSE.

/* 筛选custId=100的记录,提取目标值 */
FOR EACH ttTable WHERE ttTable.custId = 100:
  DISPLAY "目标客户名称: " ttTable.custName "邮箱: " ttTable.custEmail.
END.

3. 不导入临时表,直接读取特定行/列

若仅需某一行的某个值,无需全量导入临时表,直接逐行解析CSV即可:

DEF VAR cLine AS CHARACTER NO-UNDO.
DEF VAR aCols AS CHARACTER EXTENT NO-UNDO.
DEF VAR iTargetRow AS INTEGER NO-UNDO INIT 3. /* 目标行,例如第3行 */

INPUT VALUE FROM cFilePath.
/* 跳过表头(若CSV包含表头) */
IMPORT cLine.

REPEAT:
  IMPORT DELIMITER "," cLine.
  /* 将当前行拆分为数组 */
  aCols = SPLIT(cLine, ",").
  
  /* 读取第2列(客户名称)和第3列(邮箱) */
  IF CURRENT-REPEAT = iTargetRow THEN DO:
    DISPLAY "第" iTargetRow "行的客户名称: " aCols[2] "邮箱: " aCols[3].
    LEAVE. /* 找到目标行后退出循环 */
  END.
END.
INPUT CLOSE.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:03:15