Показать полную графическую версию : [решено] Работа с txt-файлами
vivera864864
29-05-2011, 09:30
В общем надо взять пути файлов из одного txt, взять их содержимое, вначале выставить номер по порядку и всунуть в другой файл без абзацев (в одну строку)
Такое возможно???
Foreigner
29-05-2011, 10:11
vivera864864,
Взять содержимое чего? Файлов? И приведи пример как должно быть в итоге.
vivera864864
29-05-2011, 10:18
Foreigner, да файлов
ну например в первой строке первого файла
C:\tmp.txt
его содержимое: exit
нужно чтобы во втором должно быть
1. exit
как-то так
и так с каждой строкой, их конечное кол-во неизвестно
Foreigner
29-05-2011, 10:32
vivera864864,
@echo off
setlocal
for /f "tokens=*" %%i in (list.txt) do call:echo "%%i"
goto:eof
:echo
set /a cnt+=1
1>>result.txt (
0>nul set /p="%cnt%. "
type %1
)
как-то так
vivera864864
29-05-2011, 10:37
Foreigner, Нумерует первую строку и всё
и надо копировать и нумеровать СОДЕРЖИМОЕ каждого файла
Foreigner
29-05-2011, 10:58
vivera864864,
и надо копировать и нумеровать СОДЕРЖИМОЕ »
В исходных файлах из списка ( из list.txt ) по одной строке? Поставь вопрос шире. Объясни. Если в исходных файлах больше одной строки в каждом, то:
@echo off
setlocal
for /f "tokens=*" %%i in ( list.txt ) do (
for /f "tokens=*" %%j in (' type "%%i" ') do call:echo "%%j"
)
goto:eof
:echo
set /a cnt+=1
0>nul 1>>result.txt (
set /p="%cnt%. "
set /p="%~1"
echo.
)
vivera864864
29-05-2011, 11:22
Foreigner, Вот это то что я искал спасибо громадное:)))))))))
Foreigner
29-05-2011, 11:30
vivera864864,
Одно маленькое замечание. Этот батник не будет корректно работать если в строке присутствуют "poison symbols" ( % = ( ) ! < > )
С помощью sed этот вопрос решается:
@echo off
setlocal
for /f "tokens=*" %%i in ( list.txt ) do 1>>res.tmp findstr /v "^$" "%%i"
findstr /n "." res.tmp | 1>result.txt sed "s/^\([0-9]*\):\(.*\)$/\1. \2/g"
del res.tmp
тогда до кучи:
(for /f "usebackq tokens=*" %%a in ("list.txt") do @type "%%a"
)|findstr/n $ >result.txt
С помощью sed этот вопрос решается »батником тоже можно решить использованием DelayedExpansion
Foreigner
29-05-2011, 11:40
amel27, findstr/n $ >result.txt »
Здесь нумерация будет с двоеточием, а по условию было с точкой и пробелом после номера строки. И пустые строки тоже попадут в конечный файл.
Foreigner, в условии задачи было сказано "как-то так"
так что вполне соответствует ))
а еще там сказано было "без абзацев (в одну строку)", это как?
vivera864864
29-05-2011, 11:44
запрещенных символов нету
и надо копировать В ОДНУ строку содержимое файла
нумерация не столь важна, даже желательно с двоеточием и без пробела
amel27, в одну строку например,
первая строка
Вторая строка
а в конечном должно быть первая строка Вторая строка
Foreigner
29-05-2011, 11:48
vivera864864,
Правильно поставленный вопрос -- быстрый ответ.
vivera864864
29-05-2011, 11:51
Foreigner, Извините :mail1:
вот вариант с решением проблемы спецсимволов,
с учетом того, как я понял файл "в одну строку": )
(for /f "tokens=1* delims=[]" %%a in ('^<list.txt find /n /v ""') do @(set/p $="%%a:"
for /f "usebackq delims=" %%c in ("%%b") do @(set "$c=%%c"
SETLOCAL EnableDelayedExpansion
set/p $="!$c!"
ENDLOCAL
)
echo/
))<Nul >result.txt
vivera864864
29-05-2011, 12:23
amel27, Это то что нужно причём окончательно :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC