我有一个Java类来自动化Web上的某些行为,我唯一的问题是现在我需要使用来自csv的数据而不是我需要的静态数据。
例如:
这是我的自动化类中的一个操作:
WebElement supplierAddressField = driver.findElement(By.id("FieldaddressOfSupplierLine"));
supplierAddressField.sendKeys("hollywood blvd 34");
现在,我想在.sendKeys(csvLineMap.get("supplier address"));
因为在每一行中我都不需要所有标题信息,这就是为什么我认为最好只创建一个地图列表,每个地图键都是csv的标题,值将是特定行中此标题的值。
这是csv的结构:
请帮我解决这个问题...谢谢!!
答案 0 :(得分:1)
根据您的要求,我建议您查看Apache Commons CSV。他们User Guide中的一个示例与您正在尝试的示例非常接近
Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
String lastName = record.get("Last Name");
String firstName = record.get("First Name");
}
答案 1 :(得分:0)
CREATE VIEW KFF_Sales_Data_Updated
AS
SELECT
csu.cAuditNumber
,csu.Col1
,csu.Col2
,csu.Col3
,ssu.Col1 AS StkCol1
,ssu.Col2 AS StkCol2
,ssu.Col3 AS StkCol3
FROM CustSalesUpdated csu
INNER JOIN StkSalesUpdated ssu ON csu.cAuditNumber = ssu.cAuditNumber
你现在有一个二维数组,里面有你可以处理的所有信息。
将整个事物包裹在try .. catch。
中答案 2 :(得分:0)
使用uniVocity-parsers,您只能按任意顺序解析您感兴趣的字段:
CsvParserSettings parserSettings = new CsvParserSettings();
// Let's extract headers
parserSettings.setHeaderExtractionEnabled(true);
parserSettings.selectFields("Field 5", "Field 1");
//Rows will come organized according to your field selection
List<String[]> allRows = parser.parseAll("path/to/file.csv");
如果您愿意,可以轻松获取包含所有列值的地图:
CsvParserSettings parserSettings = new CsvParserSettings();
// Let's extract headers
parserSettings.setHeaderExtractionEnabled(true);
// To get the values of all columns, use a column processor
ColumnProcessor rowProcessor = new ColumnProcessor();
parserSettings.setRowProcessor(rowProcessor);
CsvParser parser = new CsvParser(parserSettings);
//This will kick in our column processor
parser.parse(new FileReader("path/to/file.csv"));
//Finally, we can get the column values:
Map<String, List<String>> columnValues = rowProcessor.getColumnValuesAsMapOfNames();
看一看。它比任何其他解析器都快,你可以做更多的事情,比如转换值和生成java bean。
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。