我有不同类型的csv文件,例如Company,Jobcode,Workforce,我将它们放入SFTP中,并且文件将被处理并保存在DB中。我需要比较和验证csv文件的值和DB值,以便正确保存所有记录。
对于一个文件,我已经按照以下步骤进行了操作,并且能够进行验证。
删除多个文件 (一世)。 Beanshell处理器-要从Folder读取文件并将其存储在变量文件中,然后将此变量(文件)传递给-> ForEachController并放置SFTP采样器以处理文件(以便将记录保存在DB中)。
要验证csv文件和DB值,我需要获取每个文件的csv行数,对于这些文件,我将从步骤(i)中的文件夹中读取的所有文件都写入另一个csv文件(名为{{1} }。现在的问题是“ Allfiles.csv”具有以下内容
Allfiles.csv
由于是反斜杠(),所以我已将其替换为正斜杠(//)并保存在变量中。
现在我需要获取每个文件的行号。
我使用了Loop Controller-> CSV数据配置和具有以下代码的JSSR Sampler
C:\Users\AllFiles\Company_V1_0_201712251403.txt
C:\Users\AllFiles\JobCode_V1_0_201712040436.txt
C:\Users\AllFiles\Workc_V1_0_201802081914.txt
我无法获取每个文件的行号。
import org.apache.commons.io.FilenameUtils
import java.io.*
csvLineContent = vars.get('AllFiles')
log.info("-------------->" + csvLineContent)
csvLineContent = csvLineContent.replace('\\', '//') //replacing slash
vars.put('csvLineContent', csvLineContent)
log.info("==============" + csvLineContent)
csvfileWithoutExt = FilenameUtils.getName(csvLineContent)
log.info("File name is " + csvfileWithoutExt) //Get only file name
try {
if (csvfileWithoutExt.startsWith("C")) //Get the line count for company file
{
log.info("File Name of Company file-------> " + csvfileWithoutExt)
log.info("File full path ---> " + csvLineContent)
reader = new LineNumberReader(new FileReader('csvLineContent')) // Issue here
log.info("Reading file ====" + reader)
}
} catch (Throwable ex) {
log.error("Error in Beanshell", ex);
throw ex;
}
答案 0 :(得分:0)
当前您正在读取文件名,要通过变量上下文读取文件,请删除变量名周围的引号:
reader = new LineNumberReader(new FileReader(csvLineContent))
答案 1 :(得分:0)
您需要更改此行:
reader = new LineNumberReader(new FileReader('csvLineContent'))
对此:
reader = new LineNumberReader(new FileReader(csvLineContent))
但是我认为它不能工作,因为文件位于C:\Users\AllFiles
文件夹下,要读取该文件,您需要提供完整路径,而不仅仅是名称
beanshell
语言-您将不会有任何性能改进在Groovy中计算文件中的行数很简单:
int linesNo = new File('csvLineContent').readLines().size()
更多信息: