Я пытаюсь прочитать содержимое файла CSV в объект Java. Я нашел онлайн-ресурсы, в которых объясняются два способа чтения CSV, т. е. BufferReader/OpenCSV. Но большинство из них касается чтения по строкам (я имею в виду все данные строки как одно целое), проблема с моей реализацией заключается в том, что мой CSV имеет данные в столбцах, как показано ниже:
Обновлено:
Name,A,B,C,D
JoinDate,1/1/2019,1/1/2018,06/01/2018,1/1/2019
Math_Marks,80,50,65,55
Social_Marks,80,50,86,95
Science_Marks,70,50,59,85
FirstLang_Marks,60,50,98,45
SecondLang_Marks,90,97,50
Как вы видите, значение оценок не является обязательным, в приведенном выше файле у человека D нет оценок, перечисленных для «SecondLang_Marks».
и мой объект класса ниже:
public class StudentVO {
private String name;
private Calendar joinDate;
private int math_Marks;
private int social_Marks;
private int science_Marks;
private int FirstLang_Marks;
private int secondLang_Marks;
// All get and set methods for class variables
}
может ли кто-нибудь помочь мне прочитать приведенный выше csv по вертикали на основе вертикальных заголовков и загрузить значения в объект класса.
Если возможно, приведите оба примера с использованием BufferReader и OpenCSV.
Спасибо
Это файл HTML, который содержит только данные тега Table. CSV означает файл значений, разделенных запятыми, который вы будете читать только по строкам, а не по столбцам.
Извините, я просто показываю формат, файл выглядит примерно так, как показано выше, с разделителем как ,
Вам нужно показать фактическую структуру файла.
Если файл CSV содержит столбцовые данные, вам придется обрабатывать весь файл с каждым столбцом как с объектом данных, а не с каждой строкой.
хорошо, фактический файл приходит как excel. из-за некоторых ограничений безопасности я планирую преобразовать его в поддерживаемый приложением формат csv и прочитать его.
Итак, можно ли читать Excel вертикально?
Какое расширение у файла. Excel может открывать различные форматы.
xlsx - это расширение файла
@Robert Привет, я новичок в этой концепции, и я пробую и другие варианты, мне может потребоваться немного больше времени, чтобы вернуться и опубликовать свой подход, вы не можете проголосовать против, говоря, что попытка не предпринималась. И опять же, если вы чувствуете, что это то, чего он заслуживает, тогда все в порядке.




Насколько я знаю, вы можете читать данные из файла только по строкам, нет никакого механизма для чтения файла по вертикали. Но у меня есть решение для этого, прочитайте весь файл. Вы можете создать массив студентов и инициализировать его с помощью конструктора по умолчанию, а затем установить данные при чтении вниз по строке.
try {
BufferedReader reader = new BufferedReader(new FileReader("file.csv"));
// Reading first line..
String[] names = reader.readLine().split(",");
// Execpt 'names' there are total 4 students, A,B,C,D.
int totalStudents = names.length - 1;
StudentVO[] array = new StudentVO[totalStudents];
// Initialize all students with default constructor.
for(int i = 0; i < array.length; i++) {
array[i] = new StudentVO();
}
//////////////
// Start reading other data and setting up on objects..
// Line 2..
String[] joinDates = reader.readLine().split(",");
// i = 0 gives us the string 'joinDates' which is in the first column.
// so we have to skip it and start it from i = 1
for(int i = 1; i < joinDates.length; i++) {
// setting the objects data..
array[i - 1].setJoinDate(joinDates[i]);
}
// And keep on doing this until SecondLang_Marks..
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
По мнению меня, это лучший способ сделать это для этого решения.
Извините, файл, который я пытаюсь прочитать, - это Excel. Пытаюсь преобразовать его в CSV из-за того, что моя система (приложение) поддерживает формат чтения.
но, пожалуйста, дайте мне знать, возможно ли читать файл excel по вертикали
Вы можете преобразовать файл excel в CSV, после преобразования вы можете легко обработать его в java. Позвольте мне объяснить вам идею сделать волшебство, после создания CSV, не используйте openCSV и т. д., просто напишите свой собственный алгоритм для чтения всего файла, используя класс BufferedReader, метод readLine() читает одну строку из файла, как на сначала запустите его '<table>', продолжайте объединять все данные файла в одну строку, используя разделитель "\n" в конце каждой строки, добавляйте отслеживание запятой, когда она приходит, добавляйте эту полную строку в ArrayList< String> и инициализируйте строку обратно в "" и начните делать это снова.
После прочтения всего файла запустите цикл for для ArrayList<String>, каждая строка в списке представляет один элемент вашего столбца excel и просто проанализируйте его с помощью JSoup для чтения данных из HTML. :) Не забудьте принять ответ, если он вам поможет, и высказать свои замечания после того, как попробуете.
спасибо за ответ, я видел что-то подобное в Интернете, но проблема в том, что значения не являются обязательными, поэтому, если есть пустое значение, логика путается с информацией при назначении ее объекту java.
Я не понимаю, что ты сказал, можешь объяснить.
Мне жаль. Я обновил свой вопрос, т. Е. Как узнать, не имеет ли человек D значения в «SecondLang_Marks», если я прочитал информацию без заголовков, то есть ли способ узнать, что представляют данные столбца?
Я обновил ответ, проверьте его и не забудьте принять его, если он действительно помогает. Потому что это хороший способ чтения по вертикали.
Большое Вам спасибо. Позвольте мне применить изменение и посмотреть, как оно работает.
Это не файл CSV. Вероятно, вы можете использовать парсер HTML для анализа этого. Суп?