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

Компьютерный форум 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

 

Аватара для Elven

Ветеран


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

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


т.е. нужно в файле заменить все ":" на ";" и поменять расширение?

Отправлено: 17:09, 25-01-2019 | #2



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

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


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


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

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


именно так

Отправлено: 17:24, 25-01-2019 | #3


Аватара для Elven

Ветеран


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

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


Для такого я обычно использую блокнот. А если файлов много и их лень открывать - Notepad++. Ну а переименование файлов это и вовсе банальная штука (мне, конечно, больше нравится TC, но тут уж, конечно на вкус и цвет).

Отправлено: 18:26, 25-01-2019 | #4


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


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

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


Это и делается вручную в блокноте. А надо через планировщик автоматически.

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


Ветеран


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

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


porokh, на WSH:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFile

Dim objFSO
Dim strContent


If WScript.Arguments.Count = 1 Then
	strSourceFile = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FileExists(strSourceFile) Then
		With objFSO.OpenTextFile(strSourceFile)
			strContent = .ReadAll()
			.Close
		End With
		
		With objFSO.CreateTextFile(objFSO.GetBaseName(strSourceFile) & ".csv", True)
			.Write Replace(strContent, ":", ";")
			.Close
		End With
	Else
		WScript.Echo "Can't find source file [" & strSourceFile & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
	WScript.Quit 1
End If

WScript.Quit 0

Путь к исходному файлу указывается аргументом скрипта (также можно просто перетащить исходный файл на скрипт/ярлык на скрипт в Проводнике). Существующий csv-файл, одноимённый исходному, будет молча перезаписан.

P.S. Если размер Вашего исходного файла составляет более четверти размера физической оперативной памяти — пишите, сменим алгоритм на более щадяший к расходам оперативной памяти.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:44, 25-01-2019 | #6


Ветеран


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

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


По простому, не усложняя
Код: Выделить весь код
setlocal enabledelayedexpansion

set in=in.txt
set out=out.csv

for /f "delims=" %%n in (%in%) do (
set line=%%n
set line=!line::=;!
@echo !line!>>%out%
)
endlocal
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:03, 25-01-2019 | #7


Ветеран


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

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


sov44, вывод лучше вынести за пределы цикла разбора — намного быстрее будет. И промежуточное присваивание можно убрать. Наподобие:
Код: Выделить весь код
…
>"%out%"" (
	for /f "delims=" %%n in (%in%) do (
		set line=%%n
		@echo !line::=;!
	)
)
…
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:21, 25-01-2019 | #8


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


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

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


Всем спасибо за помощь!!!

Отправлено: 20:54, 25-01-2019 | #9


Ветеран


Contributor


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

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


porokh,
Вот еще вариант
Код: Выделить весь код
@Echo Off
	Set "File=Z:\Soft_In\*.txt"
	Set "BoxOut=Z:\Soft_Out"
	Set "BoxArc=Z:\Soft_In\Arc"
	Set "ExtOut=csv"
	Set "Sym1=:"
	Set "Sym2=;"

	If Not Exist "%BoxArc%" Md "%BoxArc%"

	FOR %%f IN ("%File%") DO (
		>"%BoxOut%\%%~nf.%ExtOut%" (FOR /F "usebackq delims=" %%s IN (`2^>nul more "%%f"`) DO (
		Set "SS=%%s" 
		Call Echo %%SS:%Sym1%=%Sym2%%%
		))
		>nul Move /Y "%%f" "%BoxArc%\"
	)
Во входной папке обрабатываются файлы по маске, заменяются указанные символы, файлы сохраняются в указанной выходной папке по заданному расширению, исходные файлы перемещаются в архив, чтобы больше их не обрабатывать при последующем запуске батника, так как Вам надо
Цитата porokh:
через планировщик автоматически. »
ИМХО, Вы изложили только часть задачи. Что дальше происходит с CSV-файлами?

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:42, 25-01-2019 | #10



Компьютерный форум 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




 
Переход