[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задачка на разминку))
twin
Ну что, не перевелись еще богатыри на земле русской? Или опять скажете, мол не изобретай велосипед? :D

Не стану скрывать, эта задача сейчас стоит передо мной в программе для наглядного пособия для курсов.

Я конечно решу, просто интересная задача, может кому понравится для разминки мозга))

Суть в том, что нужно прочитать CSV файл. Напомню, там строки разделяются переносами, а ячейки разделителями. В русской версии разделитель - точка с запятой. Это не сложно, если бы не одно но.

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

В итоге получается примерно вот такая запись в файле:
Пример1;"""Это
текст
с переносами
и кавычками"""
Пример2;"""Это тоже
текст
с переносами
и кавычками"""


И вот как считать такой файл в массивы строк и ячеек? Если строки разделяются переносами (\n), а ячейки точками с запятой.

Задача решаемая, так как:
1. Нет нерешаемых задач.
2. Этот файл налегке читает Excel, значит алгоритм есть.

Можете убедиться, файл во вложении.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
SerginhoLD
Вообще SplFileObject сжирает переносы в ячейках, причем обычные функции, которые по идеи делают тоже самое, не фига не работают.

А так мой давний коленочный вариант )
https://github.com/SerginhoLD/csv

_____________
"internet explorer всех правильней отображает страницы" ©
twin
Цитата (SerginhoLD @ 19.05.2019 - 00:07)
Вообще SplFileObject сжирает переносы в ячейках, причем обычные функции, которые по идеи делают тоже самое, не фига не работают.

Вот именно. Но дело даже не в этом. Мне нужен алгоритм, а не готовое решение. Дело в том, что это нужно мне не на PHP.

Твой вариант рабочий, и достаточно любопытный))) Спасибо.

В общем то я придумал два варианта, пока не реализовал, но думаю сработает. Пока не буду показывать, может кому интересно повозиться. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
nighting
Я в своё время решал эту задачу с помощью fopen()(открываем csv файл), потом fgets()(читаем строку) и explode()( делим на массив по ";")

_____________
Стране нужны паровозы! Стране нужен метал!
twin
Здесь данные не в файле, а в переменной. Но уже решено)

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.