|
Удаление поля CSV файлов | ☑ | ||
---|---|---|---|---|
0
ivanovpetr79
24.02.23
✎
23:18
|
Нужен простой и быстрый способ удаления первого поля во всех CSV файлах заданного каталога.
Поле должно удаляться для всех записей. Разделить полей точка с запятой ; Зы. Более общая задача: удалить поле с заданным индексом. Остальные условия те же. Windows 10. |
|||
1
RomanYS
24.02.23
✎
23:22
|
Если про 1С, то ЧтениеТекста и ЗаписьТекста. Реально быстро, насколько просто зависит от нюансов форматирования (кавычки и т.д.)
|
|||
2
ivanovpetr79
24.02.23
✎
23:24
|
Это секция Админ.
К 1С это не имеет никакого отношения. Зы. Это школьная задачка по информатике. Там 1С не изучают. |
|||
3
bolder
24.02.23
✎
23:26
|
(2) Без 1с делается в Excel.Удаляется колонка и сохраняется.
|
|||
4
ivanovpetr79
24.02.23
✎
23:29
|
Причём она имеет отношение больше к Devops и админству.
От программирования там всего лишь один цикл. И он не на 1С. |
|||
5
Garykom
гуру
24.02.23
✎
23:29
|
(0) >простой и быстрый способ удаления
это скопировать только нужные поля, нужных строк в новый файл |
|||
6
bolder
24.02.23
✎
23:30
|
(3) Для всех файлов каталога нужно писать на VBA например,не уверен что школьники это знают.
|
|||
7
ivanovpetr79
24.02.23
✎
23:31
|
(3) А если в каталоге сотня тысяч файлов?
Классно ты автоматизируешь процессы на предприятии! |
|||
8
Garykom
гуру
24.02.23
✎
23:33
|
рекомендую использовать очень популярный в DevOps Golang
https://zetcode.com/golang/csv/ |
|||
9
bolder
24.02.23
✎
23:34
|
(7) См (6),Гугл-автоматизатор.
|
|||
10
bolder
24.02.23
✎
23:36
|
(8) И как это соотносится с (2),школьной задачей?
|
|||
11
ivanovpetr79
24.02.23
✎
23:36
|
(6) в твоём решении есть зависимость от целого офисного пакета.
Причём платного. В правильном решении есть зависимость ровно от одного EXE файла размером 24 килобайт. |
|||
12
Garykom
гуру
24.02.23
✎
23:44
|
если свежая винда то никаких дополнительных exe не надо
https://devblogs.microsoft.com/scripting/easily-remove-columns-from-a-csv-file-by-using-powershell/ |
|||
13
ivanovpetr79
24.02.23
✎
23:44
|
(10) в школе готовят будущих админов. Нет?
|
|||
14
bolder
24.02.23
✎
23:46
|
(11) Ну ладно, тогда с помощью бесплатного VS community пишем короткий код на С++ .Ну Точно не для школьника.
|
|||
15
Garykom
гуру
24.02.23
✎
23:46
|
(14) На ЕГЭ по информатике на выбор даётся пять языков программирования:
Pascal; Python; Java; C++; C#. |
|||
16
ivanovpetr79
24.02.23
✎
23:47
|
(12) близко, но опять неверно
Наслаждаемся верным решением: https://telegra.ph/Udalenie-pervogo-polya-iz-CSV-fajla-02-24 |
|||
17
Garykom
гуру
24.02.23
✎
23:51
|
(16) это неверное решение
ибо оно кривое и нерабочее почитай для начала про формат https://ru.wikipedia.org/wiki/CSV "Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками ("). Если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд." для учебной задачки школьного уровня с простейшим cvs (не учитываем кодировки и служебные символы с экранированием их) может и пойдет для реальных CVS нет! |
|||
18
RomanYS
24.02.23
✎
23:52
|
(16) что-то не видно учета нюансов форматирования
вот такой csv обработает неправильно: """Вывы , ывывы»",sdsd ;sdsds |
|||
19
Garykom
гуру
24.02.23
✎
23:53
|
например подобный CVS:
"хрен ты вот это; правильно разделишь да это все колонка 1, хотя тут ;;;;; дохрена ;";колонка2;колонка3;колонка4 |
|||
20
Garykom
гуру
24.02.23
✎
23:53
|
(17) (19) *CSV
|
|||
21
RomanYS
24.02.23
✎
23:54
|
(16) ну вообще сомнительно выглядит выдавать за самое правильное подобное "Это свободно распространяемая утилита, которую можно скачать и установить на ваш компьютер."
|
|||
22
ivanovpetr79
24.02.23
✎
23:55
|
(17) я сегодня проверял. Оно работает.
А ваше - нет. Кроме того, оно работает с msed |
|||
23
Garykom
гуру
24.02.23
✎
23:56
|
(21) очень часто эту утилиту хрен поставишь на комп с виндой
где права зарезаны или проц не той системы (он в курсе про архитектуру IA64 где вполне себе Windows работала) да еще и в пути надо прописать вручную |
|||
24
ivanovpetr79
24.02.23
✎
23:56
|
(21) а в чем проблема?
|
|||
25
Garykom
гуру
24.02.23
✎
23:57
|
(22) извини но ты вероятно нифига не понял из (17)(18)(19)
|
|||
26
Garykom
гуру
24.02.23
✎
23:57
|
(24) в том что идиотское решение пытаешься выдать за правильное
|
|||
27
ivanovpetr79
24.02.23
✎
23:58
|
(23) это общее решение. Там можно скачать Zip архив.
Вы в айти сколько лет? Знаете про способы распространения Opensource ПО? |
|||
28
Garykom
гуру
24.02.23
✎
23:59
|
Если рассматривать школьную информатику и комп на Windows
То правильный ответ будет: 1. Используем PowerShell 2. Пишем программу для обработки на Pascal, Python, Java, C++ или C# |
|||
29
Garykom
гуру
25.02.23
✎
00:02
|
(27) я в IT почти 30 лет
неважно что опенсурс если готовых бинарников нет, и сам хрен соберешь под https://ru.wikipedia.org/wiki/Intel_Architecture или https://ru.wikipedia.org/wiki/ARM_(архитектура) и да под обе есть Windows! |
|||
30
ivanovpetr79
25.02.23
✎
00:02
|
(17) тебя в школе учили принципам KISS?
Не переусложняй, простейшее рабочее решение - самое верное. |
|||
31
ivanovpetr79
25.02.23
✎
00:03
|
(28) зачем писать программу, если есть готовая?
|
|||
32
Garykom
гуру
25.02.23
✎
00:03
|
(30) так у тебя не простейшее (ибо хрен поставишь) и не рабочее (почитай сам про CSV)
|
|||
33
Garykom
гуру
25.02.23
✎
00:04
|
(31) а чем "линукс вей" скрипт отличается от написания программы?
открой уже ссылку (12) |
|||
34
ivanovpetr79
25.02.23
✎
00:05
|
(29) ты внимательно читал текст решения? Там же прямо написано где качать, вплоть до названия секции на странице скачивания.
|
|||
35
Garykom
гуру
25.02.23
✎
00:07
|
(34) ты придуриваешься?
где мне скачать sed под Windows ARM ? |
|||
36
ivanovpetr79
25.02.23
✎
00:08
|
(35) а где в условиях задачи сказано, что это будет ARM?
Почему ты пытаешься переусложнять? |
|||
37
Garykom
гуру
25.02.23
✎
00:10
|
(36) ты понимаешь что изображаешь барана хотя тебя несколько раз тыкнули что твое решение кривое?
ну не поймет оно когда CSV нормальный, с ";" в полях |
|||
38
ivanovpetr79
25.02.23
✎
00:11
|
(35) человек, тебе дали инструкцию.
Ты должен ей следовать. А потом уже сообщить о проблемах. Почему ты сообщаешь о несуществующих проблемах решения, даже не попробовав его? |
|||
39
Garykom
гуру
25.02.23
✎
00:11
|
ыыыы
|
|||
40
ivanovpetr79
25.02.23
✎
00:12
|
(37) я сегодня пробовал это решение. Оно работает.
По буквам: Работает. |
|||
41
Garykom
гуру
25.02.23
✎
00:14
|
(40) оно не работает кроме редких случаев простейших CSV
Ваня;Петя;79 // разделит ";Вася;";"Пе;тя";79 // не разделит правильно! |
|||
42
ivanovpetr79
25.02.23
✎
00:17
|
(41) первое правило любого инженера: не переусложняй
|
|||
43
Garykom
гуру
25.02.23
✎
00:18
|
(42) ты не инженер
ты тупой дятел |
|||
44
ivanovpetr79
25.02.23
✎
00:19
|
(12)
Общее правило состоит в том, что sed работает быстрее, чем Import-Csv, потому что sed является утилитой командной строки, которая работает непосредственно с текстом, в то время как Import-Csv - это модуль PowerShell, который предоставляет объекты для работы с CSV файлами, что требует больше ресурсов. |
|||
45
ivanovpetr79
25.02.23
✎
00:21
|
(43) пройди наконец курс по бережливой разработке (lean development)
|
|||
46
Garykom
гуру
25.02.23
✎
00:23
|
(44) обрати внимание что там в твоей ссылке для перебора файлов используется зачем то PowerShell
"Get-ChildItem для получения списка всех CSV файлов в указанном каталоге. Затем, с помощью конвейера ForEach-Object" хотя можно прекрасно обойтись возможностями bat/cmd |
|||
47
Garykom
гуру
25.02.23
✎
00:24
|
(45) это не леан
это ХХП (уяк-уяк-продакшен) |
|||
48
RomanYS
25.02.23
✎
00:37
|
Кого-то ТС напоминает, не пойму только Гения или Маньяка))
|
|||
49
ivanovpetr79
25.02.23
✎
08:36
|
(46) который устарел в 2006м году
Зачем в 2023м году использовать технологию 1981го года? (47) это вспомогательная задача. Здесь нет понятия продакшена. |
|||
50
ivanovpetr79
25.02.23
✎
08:52
|
echo off
setlocal enabledelayedexpansion set "path=путь_к_каталогу" for %%F in (%path%\*.csv) do ( set "filename=%%~nF" set "directory=%%~dpF" set "output=!directory!!filename!_modified.csv" type "%%F" | sed "s/^[^;]*;//" > "!output!" ) Если рассматривать только представленные решения, то скорее всего, PowerShell будет работать быстрее, чем Batch. Это связано с тем, что в PowerShell используется объектная модель, что может быть более эффективным, чем обработка текстовых файлов с помощью командной строки. Кроме того, PowerShell предлагает мощный синтаксис, который может облегчить написание сложных скриптов, тогда как в Batch не так много инструментов для обработки строк и файлов. |
|||
51
Злопчинский
25.02.23
✎
09:46
|
(43) "если бы строители строили так как программисты пишут программы - первый же залетевший дятел разрушил цивилизацию"...
|
|||
52
ivanovpetr79
25.02.23
✎
10:33
|
(51) во-первых идёт речь не о строительстве дома.
А о элементарной тестовой фикстуре для интеграции. Во-вторых это задача не связанная с программированием. |
|||
53
Кирпич
25.02.23
✎
11:28
|
|
|||
54
Кирпич
25.02.23
✎
11:29
|
(0) учи питон. тяп ляп и готово. и на форумах не надо ничего спрашивать
|
|||
55
RomanYS
25.02.23
✎
11:41
|
(53) Это ты прямо задачу описанную в (0) решил, для ТСа это избыточно, ему надо до первого разделителя строки порезать. Без этого не будет последующего секаса с кривыми полученными csv)))
|
|||
56
Кирпич
25.02.23
✎
11:50
|
(55) Ну автор пускай занимается тем, что ему нравится :) Он же инженер. А нам, неинженерам, лучше попроще и понадежнее.
|
|||
57
ivanovpetr79
25.02.23
✎
12:10
|
(56) это админо девоповская задача для qs
|
|||
58
Кирпич
25.02.23
✎
12:36
|
(57) ну вот девопсу и сам бог велел на питоне скрипты царапать
|
|||
59
mistеr
25.02.23
✎
12:51
|
(16) sed отлично, но я бы взял awk, его проще сопровождать. Есть форки awk, разбирающие CCSV по всем правилам.
|
|||
60
ivanovpetr79
25.02.23
✎
13:06
|
(59) действительно, в целом, использование awk может быть более эффективным и гибким решением для обработки файлов и текстовых данных, особенно если нужно обрабатывать большие объемы данных или выполнять сложные операции. Однако, если задача очень простая, то использование MiniSed может быть быстрее и удобнее.
|
|||
61
ivanovpetr79
25.02.23
✎
13:07
|
Windows awk CSV Processing.
Petr Boldin Перепишите это решение используя awk для Windows. PowerShell тоже должен быть Get-ChildItem -Path "путь_к_каталогу" -Filter *.csv | ForEach-Object {Get-Content $_.FullName | MiniSed "s/^[^;]*;//" | Set-Content ($_.DirectoryName + "\" + $_.Name)} Для использования awk в Windows необходимо установить GNU awk. Вот как будет выглядеть переписанное решение с использованием awk и PowerShell: Get-ChildItem -Path "путь_к_каталогу" -Filter .csv | ForEach-Object { gawk -i inplace "{sub(/^[^;];/,"")}1" $.FullName Move-Item $.FullName ($.DirectoryName + "" + $.Name) } Объяснение: gawk - это имя исполняемого файла GNU awk, который мы должны использовать вместо MiniSed. -i inplace - это опция, которая говорит gawk перезаписать файл вместо вывода результата в консоль. Это эквивалентно опции sed -i. "{sub(/^[^;]*;/,\"\")}1" - это скрипт awk, который заменяет первый символ ; в строке на пустую строку. Это эквивалентно регулярному выражению s/^[^;]*;// в MiniSed. Move-Item - это команда PowerShell, которая перемещает файл в другое место. Мы используем ее вместо Set-Content для перемещения файла после его изменения. |
|||
62
ivanovpetr79
25.02.23
✎
13:08
|
Windows awk CSV Processing.
Petr Boldin Перепишите это решение используя awk для Windows. PowerShell тоже должен быть Get-ChildItem -Path "путь_к_каталогу" -Filter *.csv | ForEach-Object {Get-Content $_.FullName | MiniSed "s/^[^;]*;//" | Set-Content ($_.DirectoryName + "\" + $_.Name)} Для использования awk в Windows необходимо установить GNU awk. Вот как будет выглядеть переписанное решение с использованием awk и PowerShell: Get-ChildItem -Path "путь_к_каталогу" -Filter .csv | ForEach-Object { gawk -i inplace "{sub(/^[^;];/,"")}1" $.FullName Move-Item $.FullName ($.DirectoryName + "" + $.Name) } Объяснение: gawk - это имя исполняемого файла GNU awk, который мы должны использовать вместо MiniSed. -i inplace - это опция, которая говорит gawk перезаписать файл вместо вывода результата в консоль. Это эквивалентно опции sed -i. "{sub(/^[^;]*;/,\"\")}1" - это скрипт awk, который заменяет первый символ ; в строке на пустую строку. Это эквивалентно регулярному выражению s/^[^;]*;// в MiniSed. Move-Item - это команда PowerShell, которая перемещает файл в другое место. Мы используем ее вместо Set-Content для перемещения файла после его изменения. Petr Boldin Чем решение с awk лучше решения с minised Использование awk в данном случае имеет несколько преимуществ перед использованием MiniSed: Поддержка широкого диапазона операционных систем: awk доступен как в Linux, так и в Windows, в то время как MiniSed может работать только в некоторых средах Windows, в которых он был установлен. Это означает, что решение с awk более переносимо. Более мощный язык программирования: awk является полноценным языком программирования, который поддерживает условные операторы, циклы, функции и другие возможности, которых нет в MiniSed. Это делает awk более гибким инструментом для работы с файлами и обработки текста. Удобство использования: awk позволяет легко обрабатывать файлы в пакетном режиме, используя конструкцию awk '{commands}' file1 file2 .... В отличие от этого, MiniSed требует запуска одной команды для каждого файла, что может быть неудобно, если нужно обрабатывать множество файлов. Широкие возможности для обработки данных: awk поддерживает множество встроенных функций и операций для работы с данными, включая разделение на поля, суммирование и группировку. Это может быть очень полезно, если требуется выполнить более сложные операции с данными, которые не поддерживаются MiniSed |
|||
63
mistеr
25.02.23
✎
13:32
|
(60) >если задача очень простая
Ты начал с очень простой задачи, а потом начал усложнять, пока не отпали все решения, кроме твоего :) |
|||
64
Кирпич
25.02.23
✎
13:53
|
(62)Люди упираются, изобретают парсеры csv для awk https://github.com/geoffroy-aubry/awk-csv-parser/tree/stable/src, а вы бабах и одной регулярочкой всё порешали. Ай молодцы :)
|
|||
65
ДедМорроз
25.02.23
✎
16:57
|
Я чего-то упустил из виду - а когда comma separated файлы стали semicolon separated ?
|
|||
66
RomanYS
25.02.23
✎
17:16
|
(65) Либра предлагает на выбор, МС кажется из региональных настроек берёт
|
|||
67
Garykom
гуру
25.02.23
✎
17:29
|
(65) технически CSV очень близок к https://en.wikipedia.org/wiki/Delimiter-separated_values
точнее это наиболее известный вариант лично мне больше нравится https://ru.wikipedia.org/wiki/TSV |
|||
68
H A D G E H O G s
25.02.23
✎
19:42
|
(48) Это БД развлекается. Скучно, узкий круг общения в местной среде, а скорее всего вообще нет.
|
|||
69
ivanovpetr79
05.03.23
✎
15:11
|
(65) вот и выросло поколение, которое никогда не пользовалось Excel.
В CSV файлах (Comma Separated Values - значения, разделенные запятыми) в качестве разделителя колонок можно использовать не только запятую, но и другие символы, например, точку с запятой (;), табуляцию (Tab) или пробел. В разных регионах мира используются различные символы в качестве разделителя. Однако использование точки с запятой (;) в качестве разделителя в CSV файлах обычно связано с тем, что в некоторых странах, таких как Германия, Швейцария, Австрия, Франция, Италия, Испания и другие, десятичный разделитель в числах является запятой, а не точкой, как это принято в США и Великобритании. Таким образом, использование запятой в качестве разделителя колонок и точки в качестве десятичного разделителя может привести к путанице и ошибкам в интерпретации данных в различных приложениях и операционных системах. Поэтому в этих странах для разделения колонок в CSV файлах часто используется точка с запятой (;) в качестве разделителя колонок, чтобы избежать подобных проблем. |
|||
70
Garykom
гуру
05.03.23
✎
22:46
|
(69) объясни уже как твое решение правильно разделит когда в строковых колонках есть символы ";" и "," ?
|
|||
71
ivanovpetr79
05.03.23
✎
23:07
|
(70) их нет. На нет и суда нет.
Зы. Вы в курсе про основные принципы lean разработки? KISS? Не переусложняй? Не ищи кошку там, где её нет. |
|||
72
Garykom
гуру
05.03.23
✎
23:32
|
(71) Это не lean и не kiss
Это говнокодинг дятлами-недоучками |
|||
73
Garykom
гуру
05.03.23
✎
23:33
|
И да я сам бывает говнокодю из-за сроков или даже незнания
Но не оправдываю свой говнокод мифическими lean/kiss и переделываю когда тыкают |
|||
74
АгентБезопасной Нацио
06.03.23
✎
05:46
|
(69) глядя на вас, вспоминается фраза Жванецкого: "...но иногда возраст приходит один."©
|
|||
75
ivanovpetr79
06.03.23
✎
07:05
|
(72) м-да...
То есть в сейсмически не опасных территориях (там, где за последние 100..200 лет) не было ни одного землетрясения ты тоже предлагаешь строить устойчивые к землетрясениям дома "просто так", "на всякий случай", "а если вдруг", "посмотрите, что случилосьв Турции"? |
|||
76
АгентБезопасной Нацио
06.03.23
✎
07:16
|
(75) экранированные символы-разделители в CSV-файлах - явление чуть более, чем обычное. То, что вы с ним не встречались - говорит лишь о том, что вы живете в маленьком ограниченном мирке...
|
|||
77
mikecool
06.03.23
✎
08:52
|
(4) это хлкку?
|
|||
78
АгентБезопасной Нацио
06.03.23
✎
09:07
|
(77) а вариант, чо. Оно ж художнег, почему б ему и хокку не пейсать
|
|||
79
KJlag
06.03.23
✎
09:21
|
(75) экранированные разделители у меня в каждой второй csv-шке.
другое дело что самих выгрузок на csv сейчас не так много, больше в xml выгружаем, но все же менеджеры в описание товаров любят всякого понаписать |
|||
80
uno-group
06.03.23
✎
13:07
|
Python в школах учат и написать на нем задачу из 0 не проблема. Ексель и скрипты к нему тоже учат написать на нем рабочее решение тоже можно.
утилиты командных строк которые еще надо откуда то качать в школах не учат. И не факт что на экзамене будет на компе доступ в интернет чтобы, что то с него скачать. Прав на установку чего либо у школьников точно не будет. В каком классе в школе Devops учат напомните? |
|||
81
uno-group
06.03.23
✎
13:10
|
Каталожные номера, артикулы, коды товаров очень часто идут в 1 поле и разделены чем попало в том числе и ";". Так что только посимвольное сравнение и подсчёт открывания и закрывания кавычек. нахождение ; вне кавычек.
|
|||
82
uno-group
06.03.23
✎
13:14
|
А еще в нем может быть символ переноса строки, внутри кавычек. Когда в поле храниться многострочный текст. Так, что мало найти правильные ";" нужно еще найти правильное начало строки. так что тупо выкинуть все до ";" мало дальше все равно придется эту строку посимвольно до конца прочитать.
|
|||
83
Irbis
06.03.23
✎
14:53
|
У мну при загрузке реестров на взыскание примерно как в (81) и (82) работает. Какие csv после преобразования из Excel приходят от приставов и/или других коллекторов хрен угадаешь. Приходится разбирать файл чуть ли не посимвольно.
|
|||
84
Garykom
гуру
06.03.23
✎
15:06
|
(83) разбор правильного CSV = Конечный Автомат
и понятно что КА работает посимвольно, меняя свое состояние |
|||
85
АгентБезопасной Нацио
06.03.23
✎
16:41
|
(84) кстати, попадалась где-то жуткая регулярка для разбора. Но вроде и она до конца не работала...
|
|||
86
Garykom
гуру
06.03.23
✎
16:55
|
(85) И не будет регулярка работать
Это же синтаксический разбор с построением дерева как для скобок |
|||
87
АгентБезопасной Нацио
06.03.23
✎
16:57
|
(86) теоретически регулярка - это как раз конечный автомат, который может это делать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |