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

Ответить
Аватара пользователя
ruslaw

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

Сообщение ruslaw »

Имеется input.txt:

15a

26b

37c

48d

Как получить

output1.txt:

1

2

3

4

output2.txt:

5

6

7

8

output3.txt

a

b

c

d
Аватара пользователя
alpap

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

Сообщение alpap »

Код:

Код: Выделить всё

@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

а для чего, интересно, такое будет использоваться?
Аватара пользователя
greg zakharov

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

Сообщение greg zakharov »

Проще воспользоваться 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;
Аватара пользователя
alpap

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

Сообщение alpap »

Цитата greg zakharov:



SUBSTR(txt, 3, 1)
CMD/BAT - Как разрезать текстовый файл на колонки?




а безлимит как сделать? У меня нет ограничения строки кроме штатной cmd.
Аватара пользователя
greg zakharov

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

Сообщение greg zakharov »

А кто сказал что в 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 и использовать более функциональные вещи.
Аватара пользователя
alpap

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

Сообщение alpap »

Цитата greg zakharov:



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




это и имелось ввиду под:


Цитата alpap:



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





Цитата greg zakharov:



про "безлимит" речи не было.
CMD/BAT - Как разрезать текстовый файл на колонки?




на этом форуме и пока - да. Вероятно будет. Не просто так сыр-бор.




Цитата greg zakharov:



по-хорошему, давно пора ...
CMD/BAT - Как разрезать текстовый файл на колонки?




да кто ж спорит, но вопросы-то тут задают и отвечать надо.
Аватара пользователя
megaloman

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

Сообщение megaloman »

Цитата alpap:



а для чего, интересно, такое будет использоваться?
CMD/BAT - Как разрезать текстовый файл на колонки?







До кучи

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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
Аватара пользователя
ruslaw

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

Сообщение ruslaw »

Цитата alpap:



а для чего, интересно, такое будет использоваться?
CMD/BAT - Как разрезать текстовый файл на колонки?




Это небольшой фрагмент пакетной обратботки файлов общая цель которой преобразовать базу данных записной книжки RightNote в набор файлов Scrapbook.

RightNote - одна из лучших систем управления информацией (вместе с WjjSoft myBase), но я нашел, что Scrapbook еще лучше и решил преобразовать в нее.

И еще вопрос.

Как сделать так чтобы bat обрабатывал не один файл input.txt, а множество файлов по списку list.txt, напр.

Очень бы помогло.
Аватара пользователя
alpap

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

Сообщение alpap »

Цитата ruslaw:



обрабатывал не один файл input.txt, а множество файлов
CMD/BAT - Как разрезать текстовый файл на колонки?




без списка, просто выбирая из папки: "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 >"%~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 >"%~1\%~2_out!n!".txt echo %%~a& goto #
 endlocal
exit /b
Ответить

Вернуться в «Скриптовые языки администрирования Windows»