Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: проблемы с обработкой csv  (Прочитано 1230 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн morhad

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
проблемы с обработкой csv
« : 01 Сентябрь 2017, 17:13:46 »
Есть csv файл в котором 8 полей. В качестве разделителя используется запятая. Внутри поля могут быть символы перевода строки (могут даже несколько символов перевода строки, когда в поле имеется какая-то информация, которая начинается с новой строки). Вопрос: как считывать такие поля? Ну или как убрать все символы перевода строки кроме тех, что завершают строку (т.е. которые стоят после восьмого поля). Когда я открываю такой файл в excel, то в нём всё видно как надо, поля располагаются в нужных колонках excel, но когда я пробую обрабатывать с помощью awk, то он увидев перевод строки думает, что поле кончилось.. ну или я так думаю.. :) В общем, как можно обрабатывать поля так, как будто символов перевода строки нет и считать новую строку после считывания 8-ми полей. Я ещё могу сохранить этот csv файл с текстовыми полями, которые заключены в кавычки (разумеется каждое из таких полей отделено от других запятыми), т.е. символы переноса строки будут внутри кавычек, а значит их за окончание строки считать нельзя, но пустые поля или числовые поля просто ограничены запятыми, без кавычек... Но как это использовать, чтобы считывать информацию, пока не понял.

ТС не появлялся на Форуме более полугода по состоянию на 14/07/2019 (последняя явка: 15/09/2018). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 14 Июль 2019, 05:36:42 от zg_nico »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #1 : 01 Сентябрь 2017, 18:05:15 »
  • что именно Вы хотите делать с помощью awk? Почему не использовать специализированный инструмент
  • не пробовали заменить перевод строки на другой редкий символ? Или еще лучше заменять разделитель строк
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн morhad

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #2 : 01 Сентябрь 2017, 18:13:43 »
я awk привёл в качестве примера, т.к. не знаю какой специализированный инструмент применить. Заменить, конечно, можно на любой символ, например, на пробел, тогда у нас получится очень длинная строка, куда войдут все строки, состоящие из 8-ми полей. Потом как-то нужно брать эти восемь полей, после них ставить символ переноса строки, затем брать очередные восемь полей, ставить символ переноса строки и т.д. Конечно можно как-то взять восемь полей и поместить их в файл >> file.csv
Тогда символ переноса строки добавится сам. Вот как брать восемь полей и далее двигаться по всей этой длинющей строке...
Вообще цель конечная это анализировать, что находится в некоем поле, это поле изменять и двигаться дальше по строкам до конца файла, но картину портит то, что в некоторых полях, где есть текстовое описание часто встречаются символы переноса строки, которые и портят картину.

Оффлайн Длиннорогий

  • Активист
  • *
  • Сообщений: 257
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #3 : 01 Сентябрь 2017, 18:24:06 »
А пример файла можно. Полностью в описанном вами формате

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #4 : 01 Сентябрь 2017, 18:34:59 »
Как Вы отличаете если перевод строки в 8 или 1 поле: это внутри поля или новая строка?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн morhad

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #5 : 01 Сентябрь 2017, 18:52:50 »
если я в excele смотрю файл, то в нём все поля расположены нормально. Перевод строки может быть внутри любого текстового поля. Визуально в ячейке это видно. Когда я csv файл открываю в кодовом редакторе, то тоже вижу символы OA там, где в ячейке переводится строка.
Ну а пример:

"номер п/п", "наименование", "артикул", "описание",                            "количество", "цена", "сумма","примечание"
1,            "бла бла ьла",   "1Е8",   "описание компьютера:                        1,       10000,  10000,  "рарова"
                                         вот это же описание на второй строке
                                         вот на третей (и всё это относится к
                                         полю описание)",
                             
2,            "аоарвыра ",      "2п77",  "аоыв а ыл аыла ",                          3,        4000,   12000,  "аовла"

Пробелы расставил просто для наглядности.

Я, в принципе удалял все переносы строк из файла, но получается одна очень длинная строка, которую не понятно как обрабатывать. Т.е. просто хочется опять получить многострочный файл по восемь колонок, но чтобы внутри полей уже не было символов переноса.

Да, и в том то и дело, что я никак не могу отличить, где символ переноса - внутри поля или в конце строки, поэтому удаляю все символы переноса и получаю длинную строку, очень очень длинную строку... Вот как назад её многострочной сделать*
« Последнее редактирование: 01 Сентябрь 2017, 18:54:55 от morhad »

Оффлайн Длиннорогий

  • Активист
  • *
  • Сообщений: 257
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #6 : 01 Сентябрь 2017, 18:54:42 »
morhad, вы файл выложите в исходном формате.

Оффлайн morhad

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #7 : 01 Сентябрь 2017, 19:02:07 »
файлы не я генерю. сейчас под рукой нет, т.к. с другого компа залез в форум. но принцип построения файла я попытался объяснить выше. исходный файл - это прайс, там всякие товары, я предварительно из файла убираю все запятые, затем сохраняю в csv с разделителями запятая, потом скриптом удаляю все переводы строк... Может быть и не нужно удалять все переводы строк, может быть можно как-то обработать зная, что текстовое поле с обоих концов ограничено кавычками и переводы строк не учитывать внутри кавычек? но возможно ли? если без файла нельзя, то я могу, конечно, наколотить что-нибудь в эксэле и прислать...

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #8 : 01 Сентябрь 2017, 19:13:56 »
Цель обработки какая?

Оффлайн Длиннорогий

  • Активист
  • *
  • Сообщений: 257
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #9 : 01 Сентябрь 2017, 19:14:31 »
morhad, мне удобнее видеть конкретный пример :)

Оффлайн morhad

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #10 : 01 Сентябрь 2017, 20:31:18 »
во вложении в архиве прайс, который я подготовил для примера в excel и сохранённый из него в csv. В предыдущем посте вложил,но куда-то этот пост пропал...может на модерацию из-за вложения?

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

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #11 : 01 Сентябрь 2017, 21:03:33 »
Могу сделать, но не бесплатно

Оффлайн Длиннорогий

  • Активист
  • *
  • Сообщений: 257
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #12 : 01 Сентябрь 2017, 21:57:25 »
во вложении в архиве прайс, который я подготовил для примера в excel и сохранённый из него в csv. В предыдущем посте вложил,но куда-то этот пост пропал...может на модерацию из-за вложения?

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

Вы сами себе проблему создали :) Просто не делайте перенос строки внутри ячейки и все. Заменяйте другими символами.
По регулярке ищите \n, заменяете на любой удобный символ, сортируете по столбцу и сливаете.
« Последнее редактирование: 01 Сентябрь 2017, 22:06:09 от Absalon »

Оффлайн morhad

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #13 : 02 Сентябрь 2017, 16:47:18 »
Вы сами себе проблему создали  Просто не делайте перенос строки внутри ячейки и все. Заменяйте другими символами.
По регулярке ищите \n, заменяете на любой удобный символ, сортируете по столбцу и сливаете.
Прайс генерю не я, он ко мне попадает в переносами внутри поля. Разумеется я могу заменить все переносы на любой другой символ, но заменятся также и переносы в конце строк, получится длинная-предлинная строка, которую нужно разрезать (я про это писал выше). Просто ищу оптимальный способ того, что выше писал.

Оффлайн Длиннорогий

  • Активист
  • *
  • Сообщений: 257
    • Просмотр профиля
Re: проблемы с обработкой csv
« Ответ #14 : 02 Сентябрь 2017, 16:54:42 »
но заменятся также и переносы в конце строк



 

Страница сгенерирована за 0.136 секунд. Запросов: 22.