JMeter写入CSV时含逗号字段被拆分到多列的解决方法咨询
解决方案
问题根因
CSV规范要求,字段值如果包含逗号、换行符、双引号时,必须用英文双引号包裹整个字段;如果字段本身存在双引号,需要将原双引号替换为连续两个双引号完成转义,才能避免被错误拆分到多列。
代码调整
1. 创建CSV文件的代码(表头按相同规则处理即可,无特殊字符无需额外改动)
import java.io.*; import java.lang.*; import java.util.*; import java.io.FileOutputStream; String path = "ExtractedFiles/"; String dataExtractionCSVFile = path+ "ExtractedData.${DateTime}.csv"; f = new FileOutputStream(dataExtractionCSVFile, true); p = new PrintStream(f); this.interpreter.setOut(p); print("comments"); f.close(); vars.put("dataExtractionCSVFile",dataExtractionCSVFile);
2. 写入CSV内容的代码(新增字段转义、包裹逻辑)
import java.io.FileOutputStream; import java.io.PrintStream; String comments = vars.get("comments"); String dataExtractionCSVFile = vars.get("dataExtractionCSVFile"); // 处理字段:先转义内容中的双引号,再用双引号包裹整个字段 String escapedComments = "\"" + comments.replace("\"", "\"\"") + "\""; f = new FileOutputStream(dataExtractionCSVFile, true); p = new PrintStream(f); this.interpreter.setOut(p); print(escapedComments); f.close();
扩展说明
如果后续需要写入多列数据,每一列都按照上述转义+包裹的规则处理,列与列之间用英文逗号分隔即可,示例如下:
// 多列写入示例 String col1 = vars.get("col1"); String col2 = vars.get("col2"); String escapedCol1 = "\"" + col1.replace("\"", "\"\"") + "\""; String escapedCol2 = "\"" + col2.replace("\"", "\"\"") + "\""; // 多列拼接后写入 print(escapedCol1 + "," + escapedCol2);
内容的提问来源于stack exchange,提问作者Sandeep Sharma
相关产品推荐
相关产品推荐

