Как удалить указанные c строки из файла CSV на основе номера строки в сценариях BeanShell - PullRequest
0 голосов
/ 21 апреля 2020

В настоящее время я пытаюсь удалить указанную c строку из файла CSV на основе номера строки.

Предположим, у меня есть файл CSV с данными ниже:

Rakesh,1000,25,M
Gopi,2000,26,M
Shiva,3000,30,M
Gopi,5500,29,M
Tiru,4400,30,M
Ravi,3020,20,M

Кроме того, у меня есть массив, который состоит из некоторого случайного числа [2,5,6]

Так что я хочу прочитать весь файл и записать его снова, я хочу go к этой указанной строке c и удалить эту строку полностью.

Rakesh,1000,25,M
Shiva,3000,30,M
Gopi,5500,29,M

Код

 String fileData = FileUtils.readFileToString(csvFile);
    int lines = FileUtils.readLines(csvFile).size();
    log.info("Size:"+lines);
    ArrayList myList = new ArrayList();
    for (int i=1; i<lines; i++) {
                myList.add(i);
    }
    Collections.shuffle(myList);
    for (int i = 0; i < 100; i++) {
      log.info("Numebr:"+myList.get(i));
    }

    // Need to the line delete include that logic.

    FileUtils.writeStringToFile(output, fileData);

1 Ответ

0 голосов
/ 22 апреля 2020

Прежде всего Забудьте о Beanshell .

Начиная с JMeter 3.1 вы должны использовать тестовые элементы JSR223 и Groovy язык для сценариев.

Соответствующий скрипт Groovy, который удаляет строки из исходного файла на основе массива предоставленных номеров строк на основе 1, будет выглядеть примерно так:

def file = new File('test.csv')
def originalLines = file.readLines()
def array = [2, 5, 6]
def newLines = []
0.upto(originalLines.size() - 1, { index ->
    if (!array.contains(index + 1)) {
        newLines.add(originalLines.get(index))
    } else {
        array.removeElement(index)
    }
})
file.withWriter { w ->
    newLines.each { w.println it }
}

Демо:

enter image description here

...