Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/64: Рейтинг темы: голосов - 64, средняя оценка - 4.77
 Аватар для Kaizersx
0 / 0 / 0
Регистрация: 17.07.2017
Сообщений: 19

Работа с CSV файлом в Java

18.07.2017, 21:47. Показов 12980. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

1)Прошу уточнить как с помощью стандартных библиотек Java работать с CSV фалом ( если можно перечислите необходимые Import, которые следует использовать)? Во вложении скрин файла.

2)Задача в том, чтобы посчитать кол-во встречающихся значений по отдельности из колонки Names. Например sbt-lupov-av встречается всего 2 раза. Я просто не понимаю как обращаться к конкретным ячейкам в файле ( раньше работал с XLS файлами с помощью библиотеки JXL, там за это отвечает метод getCell(int x, int b // координаты ячеек) . Т.е. как посчитать я разберусь, но как обращаться к ячейкам конкретным не понимаю.

Ну например с помощью JXL (другой файл с другими значениями) я выводил значение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import java.io.File;
 
 
public class TestP {
 
    static String b[];
    public static void main(String[] args) throws Exception {
        File f = new File("c://ExFiles/ExTest.xls");
 
        Workbook wb = Workbook.getWorkbook(f);
        Sheet s = wb.getSheet(0);
        int rows = s.getRows();
 
        String[]names=new String[rows-1];
 
        for (int n=1; n<rows;n++)
        {
            Cell a=s.getCell(0,n);
            names[n-1]=a.getContents();
        }
 
        int bob = 0;
        for (int h=0;h<names.length;h++)
 
        {
            if (names[h].equals("Bob"))
 
            {
                bob+=1;
 
            }
 
        }
        System.out.println (" ValueZ of Bob: "+bob);
    }
}
Сейчас же , если попробовать обратиться к файлу CSV , заменив путь ("c://ExFiles/ExTest.xls") на ("c://ExFiles/test.csv") и попробовать такими же методами поработать с файлом , то он выдаст ошибку:
Exception in thread "main" jxl.read.biff.BiffException: Unable to recognize OLE stream


3) Как привязать значение из колонки AccountedTime к каждому человеку ? Ну например тот же самый sbt-lupov-av встречается с значением 6 и 3 , т.е. сумма его (которая мне в итоге и нужна) равняется 9.

Особенно важны ответы на 1,2 вопрос.
Миниатюры
Работа с CSV файлом в Java  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2017, 21:47
Ответы с готовыми решениями:

Работа с файлом .csv
Имеется файл .csv (скачать можно отсюда https://www.kaggle.com/mehdidag/black-friday) Требуется его обработать и выполнить несколько...

Работа с csv файлом
filename = 'data_2017-12-27.csv' i = 0 c1 = 0 data = data1 = with open(filename) as fl: reader =...

Работа с csv файлом
Всем привет! Недавно начала изучать ruby, решаю домашку: В csv файле хрянятся температурные показатели за каждый день в виде: 30.01, -7...

7
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
19.07.2017, 00:43
csv - это обычный текстовый файл, на какой хрен тебе ole или че ты там пытаешься делать?
По сути, тебе надо считывать файл построчно и парсить, учитывая кавычки, можешь конечно сам заморочиться, но есть готовые библиотеки - за ними в гугл.
1
 Аватар для Kaizersx
0 / 0 / 0
Регистрация: 17.07.2017
Сообщений: 19
19.07.2017, 01:55  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
csv - это обычный текстовый файл, на какой хрен тебе ole или че ты там пытаешься делать?
По сути, тебе надо считывать файл построчно и парсить, учитывая кавычки, можешь конечно сам заморочиться, но есть готовые библиотеки - за ними в гугл.
Я могу тебя попросить ради примера показать код, который выводить первые 3 строки из колонки Names? Буду очень благодарен. Очень поможешь.Дальше разберусь думаю
0
 Аватар для Kaizersx
0 / 0 / 0
Регистрация: 17.07.2017
Сообщений: 19
19.07.2017, 02:06  [ТС]
Например с помощью этого кода он выводит из таблицы все значения, но как вывести первые 3 строки из Names?


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.io.*;
 
public class FilesApp {
 
    public static void main(String[] args) {
 
        try(FileReader reader = new FileReader("c://ExFiles/ExTest.csv"))
        {
            
            int c;
            while((c=reader.read())!=-1){
 
                System.out.print((char)c);
            }
        }
        catch(IOException ex){
 
            System.out.println(ex.getMessage());
        }
    }
}
Результат:

Names;valZ;valE
Bob;12;47
Sam;20;29
Bob;58;65
Sam;44;55
Sam;63;76
Charly;23;25
Bob;56;58
Charly;75;78
Миниатюры
Работа с CSV файлом в Java  
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
19.07.2017, 09:39
Files.lines().map(line->line.split(";")).map(split->split[0]). collect (toList())
Типа того.
1
 Аватар для Геомеханик
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
19.07.2017, 10:26
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.util.ArrayList;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
 
final class column {
    public String name;
    public ArrayList<String> rows;
 
    public column(String _name){
        name = _name;
        rows = new ArrayList<String>();
    }
}
 
final class table_csv {
    private final ArrayList<column> cols = new ArrayList<column>(); 
    //загрузка
    public void load(String filename, String delim) throws IOException, OutOfMemoryError {
        removeAll();
        BufferedReader fp = new BufferedReader(new FileReader(filename));
        String[] arr = fp.readLine().split(delim);
        for(String c : arr)
            addColumn(c);
 
        int r, m;
        while(fp.ready()){
            arr = fp.readLine().split(delim);
            r = addRow();
            m = Math.min(arr.length, cols.size());
            for(int i = 0; i < m; ++i)
                cols.get(i).rows.set(r, arr[i]);
        }
        fp.close();
        fp = null;
    }
 
    //добавление столбца
    public void addColumn(String name){
        for(int i = 0; i < cols.size(); ++i){
            if(cols.get(i).name.compareToIgnoreCase(name) == 0)
                return;
        }
        cols.add(new column(name));
    }
 
    //добавление строки
    public int addRow(){
        int r = num_rows();
        for(int i = 0; i < cols.size(); ++i)
            cols.get(i).rows.add("");
        return r;
    }
 
    //удаление всех
    public void removeAll(){
        for(int i = 0; i < cols.size(); ++i)
            cols.get(i).rows.clear();
        cols.clear();
    }
 
    //удаление строки
    public void removeRow(int row){
        if(row < num_rows()){
            for(int i = 0; i < cols.size(); ++i)
                cols.get(i).rows.remove(row);
        }
    }
 
    public String getColumnName(int col){ return cols.get(col).name; }
    public String getValue(int col, int row){ return cols.get(col).rows.get(row); }
 
    public int num_rows(){ return (cols.size() > 0) ? cols.get(0).rows.size() : 0; }
    public int num_columns(){ return cols.size(); }
}
 
class CyberForum {
    public static void main(String[] args) throws Exception {
        table_csv csv = new table_csv();
        csv.load("file.csv", ";");
 
        //вывести название столбцов
        for(int i = 0; i < csv.num_columns(); ++i)
            System.out.print(csv.getColumnName(i) + '\t');
        System.out.println();
 
        //ну и сами строки таблицы
        final int rows = csv.num_rows(); //можно и 3 строки вывести
        for(int i = 0; i < rows; ++i){
            for(int j = 0; j < csv.num_columns(); ++j)
                System.out.print(csv.getValue(j, i) + '\t');
            System.out.println();
        }
    }
}
1
 Аватар для Kaizersx
0 / 0 / 0
Регистрация: 17.07.2017
Сообщений: 19
19.07.2017, 11:50  [ТС]
Всем респект! Вы лучшие!
0
 Аватар для Aviz__
2745 / 2054 / 507
Регистрация: 17.02.2014
Сообщений: 9,473
25.07.2017, 14:48
Такие библиотеки, несомненно есть. Вот одна из них http://commons.apache.org/proper/commons-csv/
С ее помощью ваша задача может быть решена так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
/** */
public class TestCSV {
    public static void main(String[] args) throws FileNotFoundException {
        Map<String,Integer> myMap = new HashMap<>();
        String firsdtAndSecondName;
        Iterable<CSVRecord> records;
        try {
            try (FileReader in = new FileReader("c://ExFiles/CsvTest.csv")) {
                records = CSVFormat.newFormat(';').withFirstRecordAsHeader().parse(in);
                for (CSVRecord record : records) {
                    firsdtAndSecondName = record.get(0).concat(" ").concat(record.get(1));
                    if (myMap.containsKey(firsdtAndSecondName)){
                        int val = myMap.get(firsdtAndSecondName);
                        val += Integer.parseInt(record.get(2));
                        myMap.put(firsdtAndSecondName,val);
                    }
                    else
                        myMap.put(firsdtAndSecondName,Integer.parseInt(record.get(2)));
                }
                for (Map.Entry entry : myMap.entrySet())
                    System.out.println(entry.getKey() + " ==> " + entry.getValue());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
.csv файл прикрепляю
результат работы:
Bash
1
2
3
4
kate te ==> 8
bob ob ==> 4
lusy sy ==> 6
sem em ==> 6
Вложения
Тип файла: zip CsvTest.zip (190 байт, 9 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2017, 14:48
Помогаю со студенческими работами здесь

Работа с csv файлом
Вообщем открываю файл csv, читаю с него все в массив, а каждую строку еще разбиваю еще на один массив. и начинаю сравнивать, и в итоге...

Работа с csv файлом (посчитать среднюю заплату по округу)
Допустим у меня есть csv файл с таким содержанием: &quot;Федеральный округ;Субъект РФ;Денежные доходы в расчете на душу населения, руб./месяц ...

Ошибка с файлом csv
Не получается выгрузить таблицу с товарами в формате csv Добавлено через 23 секунды Ошибка: Неизвестное поле в заголовке таблицы:...

GUI Работа с текстовым файлом, лог файлом не мешая системе
Хочу написать прогу которая будет по таймеру искать в тхт - лог файле сообщение об ошибке. Например Error: 100 Qt C++ gui изучаю недавно...

JAVA apache common CSV
Подскажите, почему Выдает ошибку: HashSet&lt;String&gt; cannot be resolved to a type на строчке private static Set&lt;String&gt; exclude =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru