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

Progress Database 4GL结果换行问题:如何改为单行显示及CSV导出?

Progress 4GL 查询结果单行显示与CSV导出问题解决办法

我懂你这种头疼——查询结果自动拆成好几行,不管看还是导出CSV都乱糟糟的。针对你写的这条FOR EACH语句,咱们从界面显示和CSV导出两个方面来调整,保证结果都能整整齐齐显示在单行:

一、让界面显示结果单行展示

默认的DISPLAY命令会根据终端窗口宽度自动换行,咱们可以通过指定字段格式、强制不换行和设置输出宽度来解决:

修改你的DISPLAY语句为下面这样:

Display wOrder.OrderNo FORMAT "999999"
        wOrder.OrderDate FORMAT "99/99/9999"
        wShipment.ShippedDate FORMAT "99/99/9999"
        wOrder.CustID FORMAT "X(15)"
        wOrder.sourceDoc FORMAT "X(20)"
        wOrder.srcPO FORMAT "X(20)"
        wShipmentDet.ShipStatus FORMAT "X(10)"
        wShipment.appointmentdate FORMAT "99/99/9999"
        wShipment.Appointmentno FORMAT "99999"
        wOrder.shiptoName FORMAT "X(30)"
        wShipment.carrierID FORMAT "X(10)"
        wShipmentDet.ItemID FORMAT "X(20)"
        worderline.qtyorder FORMAT "9999.99"
        worderline.QtyShipped FORMAT "9999.99"
        wShipment.Volume FORMAT "9999.99"
        wShipment.Weight FORMAT "9999.99"
        wOrder.Remarks FORMAT "X(50)"
        WITH NO-WRAP WIDTH 256.

关键参数说明:

  • FORMAT:给每个字段指定固定的显示长度(数字用9占位,字符用X(n)表示n位长度),避免字段内容过长被自动截断换行
  • WITH NO-WRAP:强制关闭自动换行功能,让所有字段在同一行显示
  • WIDTH 256:设置输出的总宽度,确保能容纳所有字段的内容,你可以根据实际字段长度调整这个数值

二、导出CSV时确保单行记录

直接用DISPLAY导出CSV容易出现换行问题,建议用OUTPUT TO配合PUT语句来精确控制输出格式,这样每条记录都会是单行:

替换你的查询代码为下面的版本:

OUTPUT TO VALUE("shipment_results.csv").
-- 先写入CSV表头
PUT UNFORMATTED "OrderNo,OrderDate,ShippedDate,CustID,sourceDoc,srcPO,ShipStatus,AppointmentDate,AppointmentNo,ShiptoName,CarrierID,ItemID,QtyOrder,QtyShipped,Volume,Weight,Remarks" SKIP.

FOR EACH r4_wms.wShipmentDet NO-LOCK, 
    FIRST r4_wms.wShipment OF r4_wms.wShipmentDet NO-LOCK where wShipment.shipmentNO>5000, 
    FIRST r4_wms.wOrder OF r4_wms.wShipmentDet NO-LOCK, 
    FIRST r4_wms.wOrderline OF r4_wms.wShipmentDet NO-LOCK 
BY wShipment.ShipmentNo DESC: 

    -- 写入每条数据,用逗号分隔,QUOTER函数处理含特殊字符的字段
    PUT UNFORMATTED 
        QUOTER(wOrder.OrderNo) ","
        QUOTER(wOrder.OrderDate) ","
        QUOTER(wShipment.ShippedDate) ","
        QUOTER(wOrder.CustID) ","
        QUOTER(wOrder.sourceDoc) ","
        QUOTER(wOrder.srcPO) ","
        QUOTER(wShipmentDet.ShipStatus) ","
        QUOTER(wShipment.appointmentdate) ","
        QUOTER(wShipment.Appointmentno) ","
        QUOTER(wOrder.shiptoName) ","
        QUOTER(wShipment.carrierID) ","
        QUOTER(wShipmentDet.ItemID) ","
        QUOTER(worderline.qtyorder) ","
        QUOTER(worderline.QtyShipped) ","
        QUOTER(wShipment.Volume) ","
        QUOTER(wShipment.Weight) ","
        QUOTER(wOrder.Remarks) SKIP.

END.
OUTPUT CLOSE.

关键说明:

  • OUTPUT TO VALUE("文件名"):指定导出的CSV文件路径和名称
  • PUT UNFORMATTED:精确控制输出内容,不会自动添加多余的换行或格式
  • QUOTER():给字段添加双引号,避免字段内容里的逗号、换行符破坏CSV格式(如果字段本身有双引号,这个函数会自动转义成两个双引号,符合CSV标准)
  • SKIP:每条记录结束后换行,确保每条数据单独占一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:07