PDA

Показать полную графическую версию : [решено] Работа с 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

amel27
29-05-2011, 11:32
тогда до кучи:
(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 »
Здесь нумерация будет с двоеточием, а по условию было с точкой и пробелом после номера строки. И пустые строки тоже попадут в конечный файл.

amel27
29-05-2011, 11:44
Foreigner, в условии задачи было сказано "как-то так"
так что вполне соответствует ))

а еще там сказано было "без абзацев (в одну строку)", это как?

vivera864864
29-05-2011, 11:44
запрещенных символов нету
и надо копировать В ОДНУ строку содержимое файла
нумерация не столь важна, даже желательно с двоеточием и без пробела

amel27, в одну строку например,

первая строка
Вторая строка

а в конечном должно быть первая строка Вторая строка

Foreigner
29-05-2011, 11:48
vivera864864,
Правильно поставленный вопрос -- быстрый ответ.

vivera864864
29-05-2011, 11:51
Foreigner, Извините :mail1:

amel27
29-05-2011, 12:14
вот вариант с решением проблемы спецсимволов,
с учетом того, как я понял файл "в одну строку": )
(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