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

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

Ответить
Настройки темы
CMD/BAT - Как разрезать текстовый файл на колонки?

Пользователь


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

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


Имеется input.txt:
15a
26b
37c
48d
Как получить
output1.txt:
1
2
3
4
output2.txt:
5
6
7
8
output3.txt
a
b
c
d

Отправлено: 14:04, 29-11-2017

 

Ветеран


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

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


Код: Выделить весь код
@echo off
<input.txt (for /f "delims= eol=" %%a in ('more') do @set "s=%%a"& call :#)
pause& exit

:#
 setlocal enabledelayedexpansion
  for %%a in ("!s:~%n%,1!") do if not "%%~a"=="" set /a n+=1& >>output!n!.txt echo %%~a& goto #
 endlocal
exit /b
а для чего, интересно, такое будет использоваться?

Отправлено: 16:24, 29-11-2017 | #2



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

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


Забанен


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

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


Проще воспользоваться SQLite.
Код: Выделить весь код
/* 2>nul
@echo off
  for /f "tokens=1,2,3 delims=|" %%i in ('sqlite3 ^<"%~f0"') do (
    echo:%%i>>output1.txt
    echo:%%j>>output2.txt
    echo:%%k>>output3.txt
  )
exit /b */
CREATE TEMP TABLE t(txt);
.import file.txt t
SELECT SUBSTR(txt, 1, 1), SUBSTR(txt, 2, 1), SUBSTR(txt, 3, 1) FROM t;
DROP TABLE t;

Отправлено: 17:24, 29-11-2017 | #3


Ветеран


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

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


Цитата greg zakharov:
SUBSTR(txt, 3, 1) »
а безлимит как сделать? У меня нет ограничения строки кроме штатной cmd.

Отправлено: 17:55, 29-11-2017 | #4


Забанен


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

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


А кто сказал что в cmd строка не имеет ограничение по количеству символов? Там потолок в 8191 символ, раз, во-вторых, если делать разбор все тем же SQLite, можно запилить цикл, бьющий строку на нужное количество столбцов, два, ну и третье. Вопрос был задан как разбить строки, про "безлимит" речи не было. И кстати, вся задача по сути сводится к одной единственной команде в консоли:
Код: Выделить весь код
cmd /v/c "(for /f %i in (file.txt) do @set "#=%i"&(for /l %j in (0,1,2) do @set /a n=%j+1&@echo !#:~%j,1!>>output!n!.txt))" >nul
А вообще, по-хорошему, давно пора положить на cmd и использовать более функциональные вещи.

Отправлено: 18:15, 29-11-2017 | #5


Ветеран


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

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


Цитата greg zakharov:
Там потолок в 8191 символ »
это и имелось ввиду под:
Цитата alpap:
кроме штатной cmd. »
Цитата greg zakharov:
про "безлимит" речи не было. »
на этом форуме и пока - да. Вероятно будет. Не просто так сыр-бор.

Цитата greg zakharov:
по-хорошему, давно пора ...»
да кто ж спорит, но вопросы-то тут задают и отвечать надо.

Отправлено: 20:07, 29-11-2017 | #6


Ветеран


Contributor


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

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


Цитата alpap:
а для чего, интересно, такое будет использоваться? »
До кучи
Код: Выделить весь код
@Echo Off

Set "FileIn=Z:\Box_In\input.txt"
Set "OutFile=Z:\Box_Out\output"
Set "OutFileExt=txt"
Set /A N1=0
Set /A N2=2

FOR /L %%i IN (%N1%,1,%N2%) DO (
	>"%OutFile%%%i.%OutFileExt%" (FOR /F "usebackq delims=" %%s IN ("%FileIn%") DO Call :Column "%%s" %%i)
)
GoTo :Eof

:Column
	Set "@Str=%~1"
	Call Set "@Str=%%@Str:~%2,1%%"
	Echo %@Str%
GoTo :Eof

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


Отправлено: 20:42, 29-11-2017 | #7


Пользователь


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

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


Цитата alpap:
а для чего, интересно, такое будет использоваться? »
Это небольшой фрагмент пакетной обратботки файлов общая цель которой преобразовать базу данных записной книжки RightNote в набор файлов Scrapbook.
RightNote - одна из лучших систем управления информацией (вместе с WjjSoft myBase), но я нашел, что Scrapbook еще лучше и решил преобразовать в нее.
И еще вопрос.
Как сделать так чтобы bat обрабатывал не один файл input.txt, а множество файлов по списку list.txt, напр.
Очень бы помогло.

Отправлено: 22:42, 30-11-2017 | #8


Ветеран


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

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


Цитата ruslaw:
обрабатывал не один файл input.txt, а множество файлов »
без списка, просто выбирая из папки: "C:\papka" все txt (или точнее задать маску при необходимости)
Код: Выделить весь код
@echo off
set "d1=C:\papka"
set "d2=C:\out"
if not exist "%d2%" md "%d2%"
for /f "delims=" %%f in ('2^>nul dir /a-d/b "%d1%\*.txt"') do <"%d1%\%%f" (for /f "delims=" %%a in ('more') do @set "s=%%a"& call :# "%d2%" "%%~nf")
pause& exit

:#
 setlocal enabledelayedexpansion
  for %%a in ("!s:~%n%,1!") do if not "%%~a"=="" set /a n+=1& >>"%~1\%~2_out!n!".txt echo %%~a& goto #
 endlocal
exit /b
если сильно надо по списку, то так:
(в файле списка перечислить имена файлов с расширением в столбик по одному в строке)
Код: Выделить весь код
@echo off
set "d1=C:\papka"
set "d2=C:\out"
set "f=C:\spisok.txt"
if not exist "%d2%" md "%d2%"
for /f "delims=" %%f in ('2^>nul dir /a-d/b "%d1%\*.txt"^|findstr /g:"%f%"') do <"%d1%\%%f" (for /f "delims=" %%a in ('more') do @set "s=%%a"& call :# "%d2%" "%%~nf")
pause& exit

:#
 setlocal enabledelayedexpansion
  for %%a in ("!s:~%n%,1!") do if not "%%~a"=="" set /a n+=1& >>"%~1\%~2_out!n!".txt echo %%~a& goto #
 endlocal
exit /b

Последний раз редактировалось alpap, 01-12-2017 в 03:07.

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

Отправлено: 02:59, 01-12-2017 | #9


Пользователь


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

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


Большое спасибо за помощь!

Отправлено: 23:01, 02-12-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как построчно разбить текстовый файл на текстовые файлы содержащие одну строку binwatch@vk Скриптовые языки администрирования Windows 3 09-09-2012 19:59
CMD/BAT - Как разбить текстовый файл на куски определенного размера? helik Скриптовые языки администрирования Windows 7 16-11-2011 06:35
Как прочитать на JavaScript текстовый файл? Efremov Вебмастеру 5 11-01-2006 11:27
Как разрезать файл 700-800 МВ на несколько частей gormark Хочу все знать 6 31-08-2005 07:41
Как "разрезать" звуковой файл? Guest Хочу все знать 2 09-12-2002 01:17




 
Переход