Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] как разбить один txt на несколько (http://forum.oszone.net/showthread.php?t=176189)

shadowbat 20-05-2010 22:53 1417702

как разбить один txt на несколько
 
имеется файл txt такого типа

вфывафыа
фывфыв
фывфыв



фывфывфыв
аываываыва
ываываыва


и так штук 300 кусков.

как разбить это все на 300 файлов txt, чтобы каждый из них начинался со своего куска

(как вариант можно к каждому куску добавить любой символ. например !!! чтобы батник или vbs находил следующий кусок по маске "!!!" - это как вариант)

amel27 21-05-2010 09:31 1417927

Код:

@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 1417937

amel27, работает!!

Вы гений!! хорошо, когда в каждой среде есть специалисты :) (см. PM)

megaloman 21-05-2010 20:59 1418437

Ответы 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 1418509

Цитата:

Цитата megaloman
но выбрасывать жалко »

интересно было бы создать большую библиотеку с 300-400 задач и конкретными решениями. вот например на основе этого форума. получится хорошая книжка/ FAQ

так самое главное, что мне нравится - ничего качать не нужно. создал BAT и программа готова :)

Seryoga204 04-10-2010 22:47 1511492

А если файл такого типа:

вапвпывпывпв
ывпывапывпыв
вапывпывпывп
--- ---
ывпывпывпывпыв
впывпывпывпыв
вапывпывпывп
ывапывпывпвып
--- ---
ывпаывапывпывп
ывапывпывпывпыв
вапывпывпывапывп
--- ---

Т.е. блоки разделены не пустой строкой, а строкой типа
"--- ---"

amel27 05-10-2010 04:06 1511614

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 1511644

amel27,
Спасибо! То что надо.


Время: 05:02.

Время: 05:02.
© OSzone.net 2001-