Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для Pepeka
171 / 170 / 36
Регистрация: 15.01.2014
Сообщений: 1,010

Парсинг CSV-файла

28.02.2017, 07:03. Показов 3573. Ответов 3
Метки нет (Все метки)

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

Есть Excel файл, собственно обычный прайс. Вручную (с удалением логотипа, контактов и прочей не-табличной информации) файл приводится к виду обычной таблицы, что-то типа:



Далее файл выгружается на сервер... Как думается, в формате .CSV - проще распарсить такой формат, хотя это лично мое мнение ))

Задача - прочитать по событию файл (нажатие кнопки прайса), для последующей обработки (вывод полученных данных на экран с подстановкой DIV, функциональных кнопок и прочего).

Собственно на этом и завис - как корректнее всего прочитать CSV файл, состоящий из строк, где каждая строка включает себя 6 полей? Некоторые поля (для Вес1... Вес4) могут быть пустые (нет в наличии, не производится).
Читать ли такой в файл в массив, для последующей обработки? Или еще как-то?

Есть еще подзадача... Группировка данных по первому размеру (все товары, начинающиеся с размера 100 мм, потом все товары, начинающиеся с размера 200 мм) - но это уже потом и сам, а пока непонятно как, в каком виде получить данные из файла для удобной дальнейшей обработки.

Размер файла... Около 300-400 подобных строк. Не сказать, что большой, но и точно не маленький. Читал в сети про нагруженность на сервер, его память, процессор при использовании некоторых вариантов библиотек - но тут сильно плаваю, не могу оценить что и как грамотнее, оптимизированно применить. И нужна ли библиотека тут вообще - от формата Excel же уходим, остается текстовый, CSV.

Вот. Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2017, 07:03
Ответы с готовыми решениями:

Парсинг CSV (Spine2D *.atlas)
Народ, помогите распарсить кое-какие данные. Есть некий текстовый файл, сразу оговорюсь, что это структура *.atlas для анимационной...

Диаграмма по данным из csv-файла
Здравствуйте, дорогие форумчане:). Подскажите, пожалуйста, с помощью чего мне нарисовать диаграмму по данным из файла csv:rtfm:. 1....

Парсинг CSV Файла
Помогите пожалуйста написать код парсера для csv файла на objective-C csv файл состоит из 6 столбцов(Цитата Перевод Источник ОЦЕНКА...

3
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
28.02.2017, 09:21
PHPExcel используй, получишь массив, из него построишь таблицу уже с помощью javascript
1
 Аватар для Pepeka
171 / 170 / 36
Регистрация: 15.01.2014
Сообщений: 1,010
28.02.2017, 22:02  [ТС]
Цитата Сообщение от Уф Посмотреть сообщение
PHPExcel используй, получишь массив, из него построишь таблицу уже с помощью javascript
Мгм... Ёмко ))

А хоть как-то подробнее можно про это? Про связку PHP и JS как-то и не думал.
0
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
01.03.2017, 00:11
Лучший ответ Сообщение было отмечено Pepeka как решение

Решение

страница для загрузки
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
 
<form method="post" enctype="multipart/form-data" style="display:inline;"><input type="file" name="excel" id="excel" accept=".xls, .xlsx"></form>
<button id="btn_upldxls"><span class="btn upl">прочитать</span></button> <select id="xls_list"><option value="0">0</option></select>
 
<b style="cursor: pointer;" onClick="$('#xls_file').toggle();">Содержимое файла</b>
<div style="height:300px; overflow:auto; display: none;" id="xls_file">
<table id="tblXls" class="display compact cell-border" cellpadding="3px" width="100%">
<thead><tr></tr></thead>
<tbody></tbody>
</table>
</div>
JavaScript
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
$('#btn_upldxls').click( function(){ //загрузить из ексель
        $('#xls_file').show();
        var formData = new FormData($('form')[0]);
        formData.append('page', $('#xls_list').val());
        $.ajax({
            type: "POST",
            processData: false,
            contentType: false,
            url: "reader.php",
            data:  formData 
        }).done(function( data ) {
            var prov = JSON.parse(data),
                sellist = '';
            prov.list.forEach(function(item,i,arr){sellist += '<option value="'+i+'">'+item+'</option>';});
            if(sellist != $('#xls_list').html()) $('#xls_list').html(sellist);
            if(dtXls != undefined) { dtXls.fnClearTable(); dtXls.fnDestroy(); }
            $('#tblXls thead tr').html('');
            var dtCfg = {
                "columns" : [],
                "ordering": false,
                "sScrollY": "240px",
                "sDom": "<fi><t>",
                "createdRow": function ( row, data, index ) { var colnum = 0;
                    for(var key in data) {
                        var color = data[key+'color'];
                        if(color != 'FFFFFF') $('td', row).eq(colnum).css('background','#'+color); colnum += 1;
                    }
                }
            };
            var colnum = 0;
            for( var bkey in prov.data[0]) {
                if(bkey.substr(-5)!='color') {
                    dtCfg.columns.push({
                        "data" : bkey,
                        "title" : bkey +'[' + colnum + ']'
                    });
                    colnum += 1;
                }
            }
            dtXls = $('#tblXls').dataTable(dtCfg);
            dtXls.fnAddData(prov.data);
        });
    });
reader.php
PHP
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
error_reporting(E_ALL);
set_time_limit(0);
 
$tmp_name = $_FILES["excel"]["tmp_name"];
$name = $_FILES["excel"]["name"];
move_uploaded_file($tmp_name, "/var/www/uploads/bom/".$name);
 
include '../../resources/Classes/PHPExcel/IOFactory.php';
$path = end(explode(".", $name));
if($path == 'xls') $inputFileType = 'Excel5';
if($path == 'xlsx') $inputFileType = 'Excel2007';
$inputFileName = "/var/www/uploads/bom/".$name;
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
//$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
$worksheetList = $objReader->listWorksheetNames($inputFileName);
$objPHPExcel->setActiveSheetIndex($_POST['page']);
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
 
foreach($sheetData as $rk => $row) {
    foreach($row as $ck => $cell) {
        $color = $objPHPExcel->getActiveSheet()->getStyle($ck.$rk)->getFill()->getStartColor()->getRGB();
        $sheetData[$rk][$ck."color"] = str_replace('000000','FFFFFF',$color);
    }
}
 
$lastrow = array_pop($sheetData);
echo '{"data": [';
foreach($sheetData as $row) echo json_encode($row).',';
echo json_encode($lastrow).'], "list": '.json_encode($worksheetList).'}';
это то что я делаю, для отображения результата использую библиотеку DataTables, тебе наверно это не нужно, ты можешь там же в пхп наколдовать групировку строк и прочее колдунство что ты хотел и выплюнуть готовый файл опять в эксель формате, без всяких отображений

Добавлено через 1 минуту
ссылка на либу https://github.com/PHPOffice/PHPExcel

Добавлено через 2 минуты
еще к первой части
JavaScript
1
2
3
    $('#xls_list').change(function(){
        $('#btn_upldxls').trigger('click');
    });
это чтобы страницы переключались

Добавлено через 5 минут
если запутаешься я тебе в архиве пришлю все файлы, только залить на сервер и можно играться будет
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2017, 00:11
Помогаю со студенческими работами здесь

Парсинг CSV файла
Здравствуйте! Помогите пожалуйста, стоит такая задача, нужно сделать парсинг CSV файла, при этом имена столбцов начинаются с 8 строки,...

Парсинг CSV файла
Привет, я тут чутка джуниор, поэтому хотелось бы узнать как крутые дяди бы сделали эту задачу. Клиентская часть уже написана,...

Очистка csv файла от мусора - Парсинг
Ребят, нужна помощь, есть csv файл с почти 1000 строк параметров с текстами, больше половины текстов в нём бездумно раньше вставлялись в...

Парсинг и загрузка CSV файла в базу данных MYSQL
Есть файл CSV с таким форматом данных: 0,Name0,Name_Trans0,price0,small_text0,big_text0 ...

Парсинг файла данных производственного календаря в формате csv
Добрый день. Потребовалось получить выходные дни с гос. сайта: http://data.gov.ru/opendata/7708660670-proizvcalendar. Каким образом лучше...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru