2017-01-08 8 views
1

Ich habe eine Frage in Bezug darauf, wie Sie eine zufällige Zeile in einer CSV-Datei mit Groovy auswählen können.So wählen Sie eine zufällige Zeile aus einer CSV-Datei

Momentan habe ich zwei groovige Skripte (eigentlich drei, aber der dritte ist für diese Frage nicht wichtig). Ein grooviges Skript heißt "ReadData", wo es die CSV-Datei liest und sie in Zeile eins setzt, und dann gibt es einen weiteren Schritt mit dem Namen SetProperties, der, wie er angibt, den Eigenschaftswert auf den Wert des CSV setzt.

Die unten stehenden Skripts suchen nun die zweite Zeile in der CSV-Datei in der ersten Spalte der Tabelle und legen sie als Eigenschaftswert fest. Meine Frage ist, anstatt die zweite Zeile auszuwählen, wie kann ich eine zufällige Zeile aus der Tabelle auswählen (wir wählen nicht aus der ersten Zeile der Tabelle aus, da dies unsere Header sind).

ich habe versuchen innerhalb SetProperties ersetzt:

testRunner.testCase.setPropertyValue("id", singleLineArray[0])) 

mit

testRunner.testCase.setPropertyValue('departureAirportId', String.valueOf((int)Math.random()*singleLineArray[0])) 

aber kein Glück, da es fehlerhaft.

+0

Ruby-Tag entfernt, da dies nichts mit Ruby zu tun hat –

+0

Auch sollten Sie einen geeigneten CSV-Parser verwenden –

+0

Tim zur Rettung wieder, ich werde einen Blick auf CSV-Parsern, sobald ich dieses kleine Problem beenden. Danke – BruceyBandit

Antwort

1

Mögliche Lösung

Ich habe noch nie Groovy so nehmen diese mit einem Körnchen Salz verwendet, aber es sollte Ihnen näher bringen, was Sie wollen. Diese answer half mir:

Random random = new Random(); // initialize this somewhere once in your code 
int randomRowId = 1 + random.nextInt(totalRecords); // Random integer between 1 and totalRecords (both inclusive). 
testRunner.testCase.setPropertyValue('departureAirportId', DataTable[randomRowId][0]); 

Ihr Code

testRunner.testCase.setPropertyValue('departureAirportId', String.valueOf((int)Math.random()*singleLineArray[0])) 

Der zweite Parameter ist:

String.valueOf((int) Math.random() * singleLineArray[0]) 

Sie noch an das erste Element Ihrer singleLineArray extrahieren, und versuchen Sie es mit einem multiplizieren Zufall float zwischen 0 und 1. Hier ist der Grund, warum es nicht funktioniert hat.

+0

Ja, ich bin auch nicht vertraut mit Goovy Scripting. benutze es nur diese Woche. Es kann immer noch nicht funktionieren. States outbounds Ausnahme für das Array 'testRunner.testCase.setPropertyValue (' departureAirportId ', singleLineArray [randomRowId])' – BruceyBandit

+0

außerhalb der Grenzen? Seltsam. Was ist der Wert von 'totalRecords', die Größe von' singleLineArray' und der Wert von 'randomRowId'? –

+0

Kann nicht scheinen, um die Daten zu protokollieren. Total Records sollte 6 (6 Zeilen in CSV-Datei), SingleLineArray sollte 1 und RandomRowId geändert werden. Der Fehler, den ich bekomme, ist java.lang.ArrayIndexOutOfBoundsException: 5, aber dieser Wert ändert sich zwischen 1-5 – BruceyBandit

Verwandte Themen