Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - txt в csv

Ответить
Настройки темы
CMD/BAT - txt в csv

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте!
Есть текстовый файл 190124.txt (имя постоянно будет меняться) содержания 5:4:7:8:4: (будет меняться)
Нужно на выходе получить содержимое файла 5;4;7;8;4; файл должен быть csv (190124.csv)
Как это проще всего реализовать?

Отправлено: 15:39, 25-01-2019

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1187
Благодарности: 497

Профиль | Отправить PM | Цитировать


Цитата Busla:
простая замена подстрок »
А что будет простой заменой? И есть ли необходимость в ней?
К тому же, шаблон регулярки, вполне себе, может быть полным, простым текстом - чего не хватает в этом методе?

-------
scio me nihil scire. Ѫ


Отправлено: 15:13, 27-01-2019 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
шаблон регулярки, вполне себе, может быть полным, простым текстом - чего не хватает в этом методе? »
а может быть и не простым текстом ;-)
когда текст - переменный, а шаблон - захардкоженная константа - всё ok
а когда найти нужно произвольную подстроку - пользователь ввёл, или в одном файле нужно найти строки из другого - случается жопа. Т.к. нужно изобретать способ экранирования синтаксиса регулярных выражений.

Отправлено: 15:53, 27-01-2019 | #22


Ветеран


Contributor


Сообщения: 2726
Благодарности: 1696

Профиль | Отправить PM | Цитировать


YuS_2, Шаблон регулярки для замены подстроки, в общем случае, в JS, имхо сложноватый. В VBS реплэйс организован проще.
Вот вариант VBS, ориентированный для применения в планировщике.
Во входной папке обрабатываются файлы по маске, заменяются указанные символы, файлы сохраняются в указанной выходной папке по заданному расширению, исходные файлы перемещаются в архив, чтобы больше их не обрабатывать при последующем запуске батника
Код: Выделить весь код
BoxIn = "Z:\Soft_In"
FileIn = "^.*\.txt$"        ' *.txt
BoxOut = "Z:\Soft_Out"
BoxArc = "Z:\Soft_In\Arc"
ExtOut = "csv"
Str1 = ":"
Str2 = ";"

Set RegMaska = CreateObject("VBScript.RegExp")
    RegMaska.Pattern = FileIn
    RegMaska.IgnoreCase = True

With CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
        Set Folds = .GetFolder(BoxIn)
        If Err.Number <> 0 Then
            MsgBox "Ошибка при открытии папки" + vbCrLf + BoxIn + vbCrLf + vbCrLf + Err.Description
            WScript.Quit 2
        End If
    On Error GoTo 0
    
    Set Files = Folds.Files
    
    For Each jf In Files
        If RegMaska.Test(jf) Then
            On Error Resume Next
            Set fIn = .OpenTextFile(jf, 1, False)

            If Err.Number <> 0 Then
                MsgBox "Ошибка при открытии файла" + vbCrLf + .GetAbsolutePathName(jf) + vbCrLf + vbCrLf + Err.Description
                WScript.Quit 2
            End If
            On Error GoTo 0

            Alls = fIn.ReadAll
            fIn.Close
            
            NewName = BoxOut + "\" + .GetBaseName(jf) + "." + ExtOut
            ArcName = BoxArc + "\" + .GetFileName(jf)
            
            On Error Resume Next
            Set fIn = .CreateTextFile(NewName, True)

            If Err.Number <> 0 Then
                MsgBox "Ошибка при создании файла" + vbCrLf + BoxOut + "\" + .GetBaseName(jf) + "." + ExtOut + vbCrLf + vbCrLf + Err.Description
                WScript.Quit 2
            End If
            On Error GoTo 0

            fIn.Write Replace(Alls, Str1, Str2)
            fIn.Close
            If .FileExists(ArcName) Then fIn=.DeleteFile(ArcName,True)
            fIn = .MoveFile(.GetAbsolutePathName(jf), ArcName)
        End If
    Next
End With
'  MsgBox "Скрипт завершен"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 20:17, 27-01-2019 | #23


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1187
Благодарности: 497

Профиль | Отправить PM | Цитировать


Цитата Busla:
а может быть и не простым текстом ;-) »
не могу не согласиться ;-)
Цитата Busla:
Т.к. нужно изобретать способ экранирования синтаксиса регулярных выражений. »
А, вот про что речь.... т.е. если шаблон вводится ручками или берется из неизвестного заранее текста? Это да, есть такой момент... но тут уж вряд ли что-либо изменится, ибо язык останется статичным навечно, скорее всего.

Цитата megaloman:
Шаблон регулярки для замены подстроки, в общем случае, в JS, имхо сложноватый. В VBS реплэйс организован проще. »
В общем случае, всё может считаться сложным... а вообще, сложность - понятие относительное, имхо. Тут бы пример какой-нибудь, был бы гораздо нагляднее...

ЗЫ да и я ведь не говорю ничего против того, что устаревают эти инструменты (wsh), потому и powershell пришел на замену всей этой связки. Но, увы, во всех абсолютно случаях полная замена пока невозможна и по большей части, именно из-за политики микрософт. Ведь даже в самом powershell есть много нюансов, привязанных даже не к версии PoSh, а к версии ОС, причем даже в пределах одной линейки номера этой ОС. Это вызывает удивление/раздражение и прочие отрицательные чувства, что естественно... А вот бороться с этим можно только кардинальным образом, то бишь сменой windows на что-то более другое.

-------
scio me nihil scire. Ѫ


Отправлено: 11:58, 28-01-2019 | #24


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6597
Благодарности: 1513

Профиль | Отправить PM | Цитировать


Powershell:
Код: Выделить весь код
import-csv .\190124.txt -Delimiter ":" | export-csv .\190124.csv -Delimiter ";"
Цитата YuS_2:
в самом powershell есть много нюансов, привязанных даже не к версии PoSh, а к версии ОС, причем даже в пределах одной линейки номера этой ОС »
Например?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 11:29, 29-01-2019 | #25


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1187
Благодарности: 497

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Например? »
Например, выполните команду get-disk в PoSh v5.1 под Win7 и под Win 10, сравните результат.
Да и вообще, сравнить можно результаты команды get-command...

-------
scio me nihil scire. Ѫ


Отправлено: 12:54, 29-01-2019 | #26


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Powershell: »
Фокус не удастся :
Цитата:
Код: Выделить весь код
import-csv : The member "4" is already present.
At line:1 char:1
+ import-csv 'C:\Мои проекты\0240\0002.csv' -Delimiter ":" | export-csv ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-Csv], ExtendedTypeSystemException
    + FullyQualifiedErrorId : AlreadyPresentPSMemberInfoInternalCollectionAdd,Microsoft.PowerShell.Commands.ImportCsvCommand
Цитата DJ Mogarych:
Например? »
Один и тот же код в одной и той же версии PowerShell 2.0 с одними и теми же входными данными возвращал разные результаты под разными ОС (Windows XP и Windows 7).

Отправлено: 14:16, 29-01-2019 | #27


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6597
Благодарности: 1513

Профиль | Отправить PM | Цитировать


Цитата Iska:
Фокус не удастся »
Я взял нормальный CSV в текстовом формате. Если формат кривой, то ничего и не выйдет, это понятно.
Цитата Iska:
разные результаты под разными ОС (Windows XP и Windows 7). »
То, что на старые операционки не ставится новый Powershell, понятно. Мне непонятен пассаж про
Цитата YuS_2:
причем даже в пределах одной линейки номера этой ОС »

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 11:08, 31-01-2019 | #28


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


DJ Mogarych, формат не кривой. Iska туда засунул csv без заголовков, буквально тот, что в примере топикстартера.

Отправлено: 12:46, 31-01-2019 | #29


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1187
Благодарности: 497

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
непонятен пассаж про »
А что тут непонятного? Windows 10 во всех её вариациях... если, например, скрипт работать должен с магазином, а магазин этот физически отсутствует, что получим в итоге? Ну и т.п.

Цитата DJ Mogarych:
на старые операционки не ставится новый Powershell»
на windows 7, вполне себе, устанавливается v5.1 ...
к тому же, речь ведь была о:
Цитата Iska:
Один и тот же код в одной и той же версии PowerShell 2.0 с одними и теми же входными данными возвращал разные результаты под разными ОС »
Цитата Busla:
Iska туда засунул csv без заголовков »
А в csv обязан быть заголовок?
RFC - 4180
Цитата:
Допускается строка заголовка в первой строке в том же формате, что и обычная строка
записи. Этот заголовок будет содержать имена, соответствующие полям в файле и должен
содержать то же количество полей, что и записи в остальной части файла (наличие или
отсутствие строки заголовка должно быть указано с помощью дополнительного параметра
"header" ("заголовок")
если требуется powershell, просто надо определить свои заголовки:
Код: Выделить весь код
import-csv 1.txt -enc utf8 -head p1,p2,p3,p4,p5 -del ':'|export-csv 1.csv -enc utf8 -del ',' -not

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 31-01-2019 в 17:22.


Отправлено: 15:07, 31-01-2019 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - txt в csv

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Разделение одного txt файла на несколько txt файлов Alexander_88 Скриптовые языки администрирования Windows 3 25-11-2018 23:50
CMD/BAT - Извлечение строк in.txt -> out.txt в определенном порядке+форматирование текста. ppm85 Скриптовые языки администрирования Windows 6 29-09-2015 11:29
txt to csv vanoman Хочу все знать 2 06-09-2014 11:51
CMD/BAT - [решено] Периеминование файла doc.csv в Документ_дата_время.csv kagorec Скриптовые языки администрирования Windows 2 29-03-2014 18:40
[решено] Вставить строчку из одного txt в оределённое место другого txt ZeroCrash AutoIt 7 13-07-2009 07:35




 
Переход