Показать полную графическую версию : [решено] как разбить один txt на несколько
shadowbat
20-05-2010, 22:53
имеется файл txt такого типа
вфывафыа
фывфыв
фывфыв
фывфывфыв
аываываыва
ываываыва
и так штук 300 кусков.
как разбить это все на 300 файлов txt, чтобы каждый из них начинался со своего куска
(как вариант можно к каждому куску добавить любой символ. например !!! чтобы батник или vbs находил следующий кусок по маске "!!!" - это как вариант)
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
Set $F=file.txt
For /F "Tokens=1* Delims=[]" %%i In ('^<"%$F%" Find /V /N ""') Do (
If Not "%%j"=="" If Not Defined $F Set /A $N+=1& Set $F=F
If Not "%%j"=="" Echo.%%j>>out_!$N!.txt
If Defined $F If "%%j"=="" Set $F=)
shadowbat
21-05-2010, 09:41
amel27, работает!!
Вы гений!! хорошо, когда в каждой среде есть специалисты :) (см. PM)
megaloman
21-05-2010, 20:59
Ответы amel27, конечно, учебник по bat- файлам! Моё решение в VBS сделано прямолинейно, но выбрасывать жалко, вставляю свои 5 коп. WHere = "H:\Delete\" ' Папка где файлы
FileAll = WHere + "all.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(FileAll, 1)
MassAll = Split(Replace(F.ReadAll, Chr(10), ""), Chr(13))
F.Close
lf = True
nf = 0
For i = 0 To UBound(MassAll)
If Len(Trim(MassAll(i))) <> 0 Then
If lf Then
lf = False
nf = nf + 1
Set F = FSO.OpenTextFile(WHere + Right("0000" + CStr(nf), 4) + ".txt", 2, True)
F.Write MassAll(i)
Else
F.Write vbCrLf + MassAll(i)
End If
Else
If Not lf Then F.Close
lf = True
End If
Next
shadowbat
21-05-2010, 23:03
но выбрасывать жалко »
интересно было бы создать большую библиотеку с 300-400 задач и конкретными решениями. вот например на основе этого форума. получится хорошая книжка/ FAQ
так самое главное, что мне нравится - ничего качать не нужно. создал BAT и программа готова :)
Seryoga204
04-10-2010, 22:47
А если файл такого типа:
вапвпывпывпв
ывпывапывпыв
вапывпывпывп
--- ---
ывпывпывпывпыв
впывпывпывпыв
вапывпывпывп
ывапывпывпвып
--- ---
ывпаывапывпывп
ывапывпывпывпыв
вапывпывпывапывп
--- ---
Т.е. блоки разделены не пустой строкой, а строкой типа
"--- ---"
Seryoga204, если пустые строки не важны, можно так:
@echo off
SETLOCAL EnableDelayedExpansion
set SRC=file.txt
set DST=out_#.txt
set DLM=--- ---
for /f "usebackq delims=" %%i In ("%SRC%") do (
if not defined $F (
set /a $N+=1& set $F=F
set "$O=%DST:#=!$N!%"
type nul >"!$O!")
if not "%%i"=="%DLM%" echo %%i>>"!$O!"
if "%%i"=="%DLM%" set $F=)
P.S. два разделителя подряд дают пустой файл
Seryoga204
05-10-2010, 07:10
amel27,
Спасибо! То что надо.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.