Issue
Newbie here!
I have learnt how to read a csv file and display in into the console, but this time I need to assign each column of the csv file into an int number and return the method so that when I type number (1) for example, the first column of this file will be displayed to the screen.
public double runAggregator(int i) throws IOException {
StockFileReader stReader = new StockFileReader (file);
List<String> Column = st.readFileData();
Solution
Each data line of the CSV file is most likely comma (,) delimited so when you read in each line, split it then display the column you want, for example:
public static void readAndDisplayDataColumn(String csvFilePath, int literalDataColumnToDisplay) throws IOException {
if (throws literalDataColumnToDisplay < 1) {
System.err.println("readAndDisplayDataColumn() method Error! " +
"Invalid column number (" + literalDataColumnToDisplay +
") supplied!");
return;
}
try (BufferedReader reader = new BufferedReader(new FileReader(csvFilePath))) {
String line;
while ((line = reader.readLine()) != null) {
String[] columnData = line.split("\\s*,\\s*);
System.out.println(columnData[literalDataColumnToDisplay - 1]);
}
}
}
Will display column 3 of each data line in file.
You will of notice that 1 is subtracted from literalDataColumnToDisplay. This is because Arrays have the first element (column so to speak in this case) at index 0 and desiredLiteralColumnNumber holds a literal value of 3. For example, if we want column 1 data, literalDataColumnToDisplay would contain value of 1, to get the actual first element from the array we need to subtract 1 to get an index value of 0.
This should get you started.
EDIT: Based on comment:
As you already know the StockFileReader#readFileData() method returns a List Interface of String (List<String>
) so, you will need to need to then iterate through the List to display the desired Column, for example:
// Assuming i is the column number.
// Don't have a clue why this method returns a double because you supply no information whatsoever.
public double runAggregator(int i) throws IOException {
StockFileReader stReader = new StockFileReader(file);
List<String> dataLines = stReader.readFileData();
for (String line : dataLines) {
String[] columnData = line.split("\\s*,\\s*);
System.out.println(columnData[i - 1]);
}
// whatever else you want to do in this method.
}
Perhaps what you want to do is return all of a specific column in double data type as an Array rather than a single double. If this is the case then perhaps this is a way to go:
public double[] runAggregator(int i) throws IOException {
StockFileReader stReader = new StockFileReader(file);
List<String> dataLines = stReader.readFileData();
double[] columnArray = new double[dataLines.size()];
for (int i = 0; i < dataLines.size(); i++) {
String[] columnData = dataLines.get(i).split("\\s*,\\s*);
columnArray[i] = Double.parseDouble(columnData[i - 1]);
}
return columnArray;
}
To use and display the returned result:
int columnNumber = 3;
try {
double[] columnValues = runAggregator(int columnNmber);
} catch(IOException ex) {
System.err.println(ex.getMessage());
}
// Display column data:
System.out.println("Column " + columnNumber + " Data:
for (double d : columnValues) {
System.out.println(d);
}
Answered By - DevilsHnd Answer Checked By - Marilyn (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.