【问题标题】:Groovy script to edit each row in a csv file用于编辑 csv 文件中每一行的 Groovy 脚本
【发布时间】:2019-06-24 21:46:04
【问题描述】:

我正在编写一个在 SOAP UI 中使用的 groovy 脚本,它读取一个 CSV 帐号文件,然后在一些 XML 中使用帐号。大约有 5000 个帐号,我需要循环一个 SOAP UI 测试用例。

由于帐号只能使用一次,我的想法是编辑 CSV 文件并说已使用该行,然后在 Groovy 中添加逻辑以不再使用该行。

我已经成功读取了 CSV 文件并循环了它,我的具体问题是我想将 CSV 的当前行设置为“是”(或者任何变量都可以:))。我可以追加到文件的末尾,但我需要追加到特定的行(即循环的当前行)。

我已经尝试过各种方法,例如 inputFile[rowsData].append("Yes"),我觉得我已经很接近了,但不是很接近(这是我第一次使用 Groovy 和 CSV)

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )  
wrapUp = groovyUtils.getXmlHolder( "WrapUp#Request" ) 
import com.eviware.soapui.support.UISupport
import groovy.io.FileType
import org.apache.commons.io.FileUtils

def csvFilePath = "file.csv"
context.fileReader = new BufferedReader(new FileReader(csvFilePath))
def inputFile = new File("file.csv")
rowsData = context.fileReader.readLines()
int rowsize = rowsData.size()

for(int i =0;  i < rowsize;  i++)
 {
    rowdata = rowsData[i]
    String[] data = rowdata.split(",")

   // if the third column is not yes, we haven't used the data
    if (data[2].toString() != "YES") {
     testRunner.testCase.setPropertyValue("ACCOUNT_NUMBER",data[1])
     testRunner.testCase.setPropertyValue("SORT_CODE",data[0])

     // this inputs to the end of the csv, needs to go to the current row

     inputFile.append("Yes")
break;
}
else
     log.info "OUT OF ACCOUNT NUMBERS"
}

【问题讨论】:

  • 您使用的是开源版还是专业版?

标签: csv groovy soapui


【解决方案1】:

你将这些行读入rowsData数组变量

然后在您迭代 rowsData 时,只需将 YES 添加到所需的 rowsData 元素:

for(int i =0;  i < rowsize;  i++)
 {
   ...
   rowsData[i]=rowsData[i]+'YES'
 }

最后你必须像这样将所有行写回文件中:

new File(csvFilePath).setText(rowsData.join('\n'), "UTF-8")

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2022-12-15
    • 2020-10-06
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多