Как разрезать текстовый файл на колонки?
Имеется input.txt:
15a
26b
37c
48d
Как получить
output1.txt:
1
2
3
4
output2.txt:
5
6
7
8
output3.txt
a
b
c
d
|
Код:
@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 |
29-11-2017 17:24 2781029 |
Проще воспользоваться 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;
|
а безлимит как сделать? У меня нет ограничения строки кроме штатной cmd.
|
greg zakharov |
29-11-2017 18:15 2781043 |
А кто сказал что в 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 и использовать более функциональные вещи.
|
Цитата:
Цитата greg zakharov
Там потолок в 8191 символ »
|
это и имелось ввиду под:
Цитата:
Цитата greg zakharov
про "безлимит" речи не было. »
|
на этом форуме и пока - да. Вероятно будет. Не просто так сыр-бор.
Цитата:
Цитата greg zakharov
по-хорошему, давно пора ... »
|
да кто ж спорит, но вопросы-то тут задают и отвечать надо.
|
Цитата:
Цитата 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
|
Цитата:
Цитата alpap
а для чего, интересно, такое будет использоваться? »
|
Это небольшой фрагмент пакетной обратботки файлов общая цель которой преобразовать базу данных записной книжки RightNote в набор файлов Scrapbook.
RightNote - одна из лучших систем управления информацией (вместе с WjjSoft myBase), но я нашел, что Scrapbook еще лучше и решил преобразовать в нее.
И еще вопрос.
Как сделать так чтобы bat обрабатывал не один файл input.txt, а множество файлов по списку list.txt, напр.
Очень бы помогло.
|
Цитата:
Цитата 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
|
Большое спасибо за помощь!
|
Время: 11:28.
© OSzone.net 2001-